ฉันถามคำถามของคุณว่าทำไมไม่ออกแบบภาษาเพื่อป้องกันไม่ให้ต้องมีการประชุมในตอนแรก? กล่าวอีกนัยหนึ่งเหตุใดสกาล่าไม่เพียงบังคับให้ใช้วงเล็บตลอดเวลาแทนที่จะปล่อยให้โปรแกรมเมอร์ละเว้นบางครั้ง
คำตอบที่พบในความโปร่งใสอ้างอิง โดยพื้นฐานแล้วหากฟังก์ชั่นไม่มีผลข้างเคียงการเรียกใช้ฟังก์ชันสามารถถูกแทนที่ด้วยผลลัพธ์ได้โดยไม่ต้องเปลี่ยนลักษณะการทำงานของโปรแกรม
นั่นหมายถึงฟังก์ชั่นที่ไม่มีพารามิเตอร์หรือผลข้างเคียงเทียบเท่ากับการvalถือครองคืนค่าของฟังก์ชันนั้น เนื่องจากคุณสมบัตินี้เมื่อคลาสวิวัฒนาการขึ้นโปรแกรมเมอร์อาจสลับไปมาระหว่างการใช้valหรือการใช้ฟังก์ชั่นตามความสะดวกหรือประสิทธิภาพกำหนด
เนื่องจากคุณสามารถละเว้นวงเล็บว่าบางสิ่งบางอย่างรหัสหมายถึงการเรียกเช่นqueue.sizeไม่จำเป็นต้องรู้ว่ามิได้ดูแลถ้าเป็นฟังก์ชั่นหรือsize valผู้ดำเนินการของQueueชั้นเรียนจึงมีอิสระที่จะเปลี่ยนระหว่างสองโดยไม่ต้องเปลี่ยนรหัสการโทรใด ๆ (แม้ว่าฉันเชื่อว่ามันจะต้องคอมไพล์ใหม่) มันรักษาเสถียรภาพส่วนต่อประสานสาธารณะของชั้นเรียน ตัวอย่างเช่นคุณอาจเริ่มต้นqueue.sizeด้วยการโทรหาsizeผู้ที่มีพื้นฐานListซึ่งเป็นไปO(n)ได้แล้วเปลี่ยนsizeเป็นvalเหตุผลที่มีประสิทธิภาพ
การประชุมแนะนำให้วงเล็บเมื่อมีผลข้างเคียงเพื่อให้ชัดเจนว่าสมาชิกชั้นนี้แน่นอนเรียกฟังก์ชั่นและดังนั้นจึงอาจไม่อ้างอิงโปร่งใส เป็นสิ่งสำคัญสำหรับการเรียกรหัสเพื่อให้ทราบว่ามีผลข้างเคียงที่เกิดขึ้นหรือไม่ดังนั้นจึงสามารถหลีกเลี่ยงการโทรซ้ำได้ หากคุณไม่สนใจว่ามันเป็นฟังก์ชั่นหรือไม่คุณก็อาจปฏิบัติต่อมันราวกับว่ามันไม่