Sorunuzu, ilk etapta kongre ihtiyacını önlemek için neden tasarlamıyorsunuz diye sordum. Diğer bir deyişle, Scala neden programcıların bazen atlamasına izin vermek yerine parantez kullanımını her zaman zorlamıyor?
Cevap referans şeffaflığında bulunur . Esasen, bir fonksiyonun herhangi bir yan etkisi yoksa, bir program çağrısı, programın davranışını değiştirmeden sonucuyla değiştirilebilir.
Bu, parametreleri veya yan etkileri olmayan bir fonksiyonun anlamsal val
olarak o fonksiyonun dönüş değerini tutmaya eşdeğer olduğu anlamına gelir . Bu özellik nedeniyle, bir sınıf geliştikçe, programcı val
kolaylık veya verimlilik belirlediği için a veya bir işlevi kullanma arasında geçiş yapabilir .
Parantezleri atlayabildiğiniz için, bunun gibi bir kodu çağırmanın kodun bir işlev veya a queue.size
olup olmadığını bilmesine gerek yoktur . Bu nedenle sınıfın uygulayıcısı , arama kodunu değiştirmek zorunda kalmadan ikisi arasında geçiş yapmakta serbesttir (ancak yeniden derlemeye ihtiyaç duyacağına inanıyorum). Sınıfın kamusal arayüzünü dengeler. Örneğin, altta yatan bir durumu çağırarak işe başlayabilirsiniz , bu da potansiyel olarak daha sonra verimlilik nedenleriyle bir olarak değişir .size
val
Queue
queue.size
size
List
O(n)
size
val
Sözleşme, bu sınıf üyesinin kesinlikle bir işlev çağrısı olduğunu ve bu nedenle potansiyel olarak referans olarak şeffaf olmadığını açıkça belirtmek için yan etkiler olduğunda parantezleri önerir . Yan etkilerin üretilip üretilmediğini bilmek için kod çağırmak önemlidir, böylece tekrar tekrar çağırmaktan kaçınabilirler. Bunun bir işlev olup olmadığını umursamıyorsanız, sanki öyle değilmiş gibi davranabilirsiniz.