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