นี่คือปัญหาการเขียนโปรแกรม / ภาษาที่ฉันต้องการจะได้ยินความคิดของคุณ
เราได้พัฒนาข้อตกลงที่โปรแกรมเมอร์ส่วนใหญ่ (ควร) ปฏิบัติตามซึ่งไม่ได้เป็นส่วนหนึ่งของไวยากรณ์ภาษา แต่ให้บริการเพื่อทำให้โค้ดอ่านง่ายขึ้น แน่นอนว่าสิ่งเหล่านี้เป็นเรื่องของการถกเถียงอยู่เสมอ แต่อย่างน้อยก็มีแนวคิดหลักบางประการที่โปรแกรมเมอร์ส่วนใหญ่เห็นด้วย การตั้งชื่อตัวแปรของคุณอย่างเหมาะสมตั้งชื่อโดยทั่วไปทำให้บรรทัดของคุณไม่ยาวเกินเหตุหลีกเลี่ยงการใช้งานที่ยาวนานห่อหุ้มสิ่งต่าง ๆ
อย่างไรก็ตามมีปัญหาที่ฉันยังไม่พบใครแสดงความคิดเห็นและอาจเป็นหนึ่งในกลุ่มที่ใหญ่ที่สุด มันเป็นปัญหาของการโต้แย้งที่ไม่ระบุตัวตนเมื่อคุณเรียกใช้ฟังก์ชัน
ฟังก์ชันมาจากคณิตศาสตร์โดยที่ f (x) มีความหมายชัดเจนเพราะฟังก์ชั่นมีคำจำกัดความที่เข้มงวดมากขึ้นซึ่งมักจะใช้ในการเขียนโปรแกรม ฟังก์ชั่นที่บริสุทธิ์ในคณิตศาสตร์สามารถทำอะไรได้น้อยกว่ามากในการเขียนโปรแกรมและพวกเขาเป็นเครื่องมือที่สง่างามกว่ามากพวกเขามักจะโต้แย้งเพียงครั้งเดียว หากฟังก์ชั่นนั้นมีหลายอาร์กิวเมนต์มันมักจะเป็นเพียงมิติเพิ่มเติมของโดเมนของฟังก์ชัน กล่าวอีกนัยหนึ่งอาร์กิวเมนต์ไม่สำคัญกว่าอีกอาร์กิวเมนต์ พวกเขาได้รับคำสั่งอย่างชัดเจนแน่นอน แต่นอกจากนั้นพวกเขาไม่มีการจัดลำดับความหมาย
ในการเขียนโปรแกรมเรามีอิสระในการกำหนดฟังก์ชั่นและในกรณีนี้ฉันจะเถียงว่ามันไม่ได้เป็นสิ่งที่ดี สถานการณ์ทั่วไปคุณมีฟังก์ชั่นที่กำหนดเช่นนี้
func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {}
ดูคำจำกัดความถ้าฟังก์ชั่นเขียนอย่างถูกต้องมันชัดเจนว่ามันคืออะไร เมื่อเรียกใช้ฟังก์ชั่นนี้คุณอาจมีเวทย์มนตร์ intellisense / code ที่เกิดขึ้นใน IDE / โปรแกรมแก้ไขที่จะบอกคุณว่าอาร์กิวเมนต์ต่อไปควรเป็นอย่างไร แต่เดี๋ยวก่อน. หากฉันต้องการสิ่งนั้นเมื่อฉันกำลังเขียนการโทรจริงๆไม่มีสิ่งที่เราขาดหายไปที่นี่หรือไม่ คนที่อ่านรหัสไม่ได้รับประโยชน์จาก IDE และถ้าพวกเขาข้ามไปที่คำจำกัดความพวกเขาไม่มีความคิดที่สี่เหลี่ยมสองอันที่ผ่านมาเป็นอาร์กิวเมนต์ใช้สำหรับอะไร
ปัญหายิ่งไปกว่านั้น หากข้อโต้แย้งของเรามาจากตัวแปรท้องถิ่นบางอย่างอาจมีสถานการณ์ที่เราไม่รู้ด้วยซ้ำว่าข้อโต้แย้งที่สองคืออะไรเพราะเราเห็นชื่อตัวแปรเท่านั้น ยกตัวอย่างบรรทัดโค้ดนี้
DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2])
สิ่งนี้จะช่วยบรรเทาขอบเขตที่แตกต่างกันในภาษาต่าง ๆ แต่แม้ในภาษาที่พิมพ์อย่างเคร่งครัดและแม้ว่าคุณจะตั้งชื่อตัวแปรของคุณอย่างสมเหตุสมผลคุณก็ไม่ได้พูดถึงประเภทของตัวแปรเมื่อคุณส่งผ่านไปยังฟังก์ชั่น
เนื่องจากโดยปกติจะเป็นกับการเขียนโปรแกรมจึงมีวิธีแก้ปัญหาที่เป็นไปได้มากมายสำหรับปัญหานี้ หลายคนใช้งานแล้วในภาษายอดนิยม พารามิเตอร์ที่มีชื่อใน C # อย่างไรก็ตามสิ่งที่ฉันรู้มีข้อเสียอย่างมีนัยสำคัญ การตั้งชื่อทุกพารามิเตอร์ในทุกการเรียกฟังก์ชั่นอาจไม่สามารถนำไปสู่รหัสที่อ่านได้ เกือบจะรู้สึกว่าบางทีเราอาจจะเกินความเป็นไปได้ที่การเขียนโปรแกรมข้อความธรรมดาจะช่วยให้เรา เราย้ายจากข้อความ JUST ในเกือบทุกพื้นที่ แต่เรายังคงรหัสเดียวกัน ต้องการข้อมูลเพิ่มเติมเพื่อแสดงในรหัสหรือไม่ เพิ่มข้อความเพิ่มเติม ยังไงก็ตามนี่ก็มีการสัมผัสกันเล็กน้อยดังนั้นฉันจะหยุดที่นี่
หนึ่งคำตอบที่ฉันได้ไปถึงข้อมูลโค้ดที่สองคือคุณอาจจะแกะอาเรย์กับตัวแปรที่ตั้งชื่อไว้ก่อนแล้วใช้สิ่งเหล่านั้น แต่ชื่อของตัวแปรนั้นอาจมีความหมายหลายอย่างและวิธีการที่เรียกว่าไม่จำเป็นต้องบอกวิธี ถูกตีความในบริบทของฟังก์ชั่นที่เรียกว่า ในขอบเขตภายในคุณอาจมีสองรูปสี่เหลี่ยมผืนผ้าชื่อ leftRectangle และ rightRectangle เพราะนั่นคือสิ่งที่พวกเขาเป็นตัวแทนความหมาย แต่มันไม่จำเป็นต้องขยายไปถึงสิ่งที่พวกเขาเป็นตัวแทนเมื่อได้รับฟังก์ชั่น
ในความเป็นจริงถ้าตัวแปรของคุณถูกตั้งชื่อในบริบทของฟังก์ชั่นที่เรียกว่าคุณกำลังแนะนำข้อมูลน้อยกว่าที่คุณอาจทำได้ด้วยการเรียกใช้ฟังก์ชั่นนั้นและในบางระดับหากนำไปสู่ ถ้าคุณมีกระบวนการที่ทำให้สี่เหลี่ยมคุณเก็บไว้ใน rectForClipping แล้วขั้นตอนอื่นที่ให้ rectForDrawing การโทร DrawRectangleClipped ที่แท้จริงนั้นเป็นเพียงพิธีการ บรรทัดที่ไม่มีความหมายอะไรใหม่และมีเพื่อให้คอมพิวเตอร์รู้ว่าคุณต้องการอะไรแม้ว่าคุณจะอธิบายไว้ในการตั้งชื่อแล้ว นี่ไม่ใช่สิ่งที่ดี
ฉันชอบที่จะได้ยินมุมมองที่สดใหม่เกี่ยวกับเรื่องนี้ ฉันแน่ใจว่าฉันไม่ใช่คนแรกที่จะพิจารณาปัญหานี้ดังนั้นจะแก้ไขได้อย่างไร