ฉันสงสัยว่าฉันจะไม่ได้ดูในคำถามนี้ แต่ฉันเป็นอย่างมากโปรแกรมเมอร์ที่มีประสบการณ์และฉันหวังว่าผู้อ่านที่เปิดกว้างบางคนจะให้ความสนใจ
ฉันเชื่อว่ามันเหมาะกับภาษาการเขียนโปรแกรมเชิงวัตถุที่ดีกว่าสำหรับขั้นตอนการคืนค่า (VRP) ของพวกเขาเพื่อกำหนดและบริสุทธิ์
'VRP' เป็นชื่อทางวิชาการที่ทันสมัยสำหรับฟังก์ชั่นที่ถูกเรียกว่าเป็นส่วนหนึ่งของการแสดงออกและมีค่าตอบแทนที่แทนที่การเรียกในระหว่างการประเมินการแสดงออก เช่นในคำสั่งเช่นx = 1 + f(y)
ฟังก์ชันf
กำลังทำหน้าที่เป็น VRP
'กำหนด' หมายความว่าผลลัพธ์ของฟังก์ชันขึ้นอยู่กับค่าของพารามิเตอร์เท่านั้น หากคุณเรียกมันอีกครั้งด้วยค่าพารามิเตอร์เดียวกันคุณจะได้รับผลลัพธ์ที่เหมือนกัน
'บริสุทธิ์' หมายถึงไม่มีผลข้างเคียง: การเรียกใช้ฟังก์ชันไม่ได้ทำอะไรนอกจากการคำนวณผลลัพธ์ สิ่งนี้สามารถตีความได้ว่าไม่มีความสำคัญผลข้างเคียงที่ในทางปฏิบัติดังนั้นหาก VRP แสดงข้อความดีบั๊กทุกครั้งที่มีการเรียกใช้ตัวอย่างเช่นนั่นอาจจะถูกละเว้น
ดังนั้นหากใน C #, ฟังก์ชั่นของคุณไม่ได้กำหนดและบริสุทธิ์ผมบอกว่าคุณควรจะทำให้มันเป็นvoid
ฟังก์ชั่น (ในคำอื่น ๆ ที่ไม่ได้เป็น VRP) และค่าใด ๆ จะต้องมีผลตอบแทนที่ควรจะกลับมาในไม่ว่าจะเป็นout
หรือref
พารามิเตอร์
ตัวอย่างเช่นหากคุณมีฟังก์ชั่นที่จะลบบางแถวออกจากตารางฐานข้อมูลและคุณต้องการให้มันคืนจำนวนแถวที่ลบไปคุณควรประกาศให้มันเป็นอย่างนี้:
public void DeleteBasketItems(BasketItemCategory category, out int count);
หากบางครั้งคุณต้องการเรียกใช้ฟังก์ชั่นนี้ แต่ไม่ได้รับcount
คุณสามารถประกาศการโหลดมากเกินไปได้
คุณอาจต้องการทราบว่าทำไมสไตล์นี้จึงเหมาะกับการเขียนโปรแกรมเชิงวัตถุมากกว่า ในวงกว้างมันเหมาะกับรูปแบบของการเขียนโปรแกรมที่อาจเรียกได้ว่าเป็น“ การเขียนโปรแกรมแบบขั้นตอน” (ไม่ถูกต้องเล็กน้อย) และเป็นรูปแบบการเขียนโปรแกรมแบบขั้นตอนที่เหมาะกับการเขียนโปรแกรมเชิงวัตถุได้ดีขึ้น
ทำไม? โมเดลคลาสสิกของวัตถุคือพวกเขามีคุณสมบัติ (aka คุณสมบัติ) และคุณสอบปากคำและจัดการกับวัตถุ (ส่วนใหญ่) ผ่านการอ่านและการปรับปรุงคุณสมบัติเหล่านั้น รูปแบบการเขียนโปรแกรมแบบโพรซีเดอร์มีแนวโน้มที่จะทำสิ่งนี้ได้ง่ายขึ้นเนื่องจากคุณสามารถเรียกใช้รหัสโดยอำเภอใจระหว่างการดำเนินการที่ได้รับและตั้งค่าคุณสมบัติ
ข้อเสียของการเขียนโปรแกรมเชิงโพรซีเดอร์คือเนื่องจากคุณสามารถรันโค้ดโดยพลการได้ทุกที่คุณสามารถรับการโต้ตอบที่ไม่พึงประสงค์และมีจุดอ่อนได้ผ่านตัวแปรทั่วโลกและผลข้างเคียง
ดังนั้นค่อนข้างง่ายมันเป็นการดีที่จะส่งสัญญาณให้คนที่อ่านโค้ดของคุณฟังก์ชั่นอาจมีผลข้างเคียงโดยทำให้มันกลับมาโดยไม่มีค่า