मैंने आपका सवाल उठाया कि पहली जगह में एक सम्मेलन की आवश्यकता को रोकने के लिए भाषा को क्यों नहीं डिज़ाइन किया गया? दूसरे शब्दों में, क्यों स्काला सिर्फ प्रोग्रामर को कभी-कभी उन्हें छोड़ने की अनुमति देने के बजाय, हर समय कोष्ठक के उपयोग को मजबूर नहीं करता है?
इसका जवाब संदर्भात्मक पारदर्शिता में मिलता है । अनिवार्य रूप से, यदि किसी फ़ंक्शन का कोई दुष्प्रभाव नहीं है, तो प्रोग्राम के व्यवहार को बदलने के बिना, एक फ़ंक्शन कॉल को इसके परिणाम से बदला जा सकता है।
इसका मतलब है कि पैरामीटर या साइड इफेक्ट्स के बिना एक फ़ंक्शन val
, उस फ़ंक्शन के रिटर्न वैल्यू को रखने के लिए शब्दार्थ के बराबर है । इस गुण के कारण, जैसा कि एक कक्षा विकसित होती है, प्रोग्रामर सुविधा का उपयोग करते हुए val
या किसी फ़ंक्शन का उपयोग करने के बीच आगे-पीछे स्विच कर सकता है ।
चूंकि आप कोष्ठकों को छोड़ सकते हैं, इसका मतलब है कि कोड कॉलिंग कुछ ऐसा है जिसे queue.size
जानने की आवश्यकता नहीं है और न ही परवाह size
है कि फ़ंक्शन या ए val
। Queue
इसलिए क्लास के कार्यान्वयनकर्ता बिना किसी कॉलिंग कोड को बदले बिना दोनों के बीच परिवर्तन करने के लिए स्वतंत्र हैं (हालांकि मेरा मानना है कि इसे पुन: स्थापित करने की आवश्यकता होगी)। यह वर्ग के सार्वजनिक इंटरफ़ेस को स्थिर करता है। उदाहरण के लिए, यदि आप एक से शुरू हो सकता है queue.size
फोन करके size
एक अंतर्निहित पर List
है, जो है संभावित O(n)
है, तो बदल size
एक को val
दक्षता के कारणों के लिए।
जब इस वर्ग के सदस्य निश्चित रूप से एक फ़ंक्शन कॉल है, और इसलिए संभवतः संदर्भित पारदर्शी नहीं है , यह स्पष्ट करने के लिए साइड इफेक्ट होने पर सम्मेलन कोष्ठक का सुझाव देता है । कॉलिंग कोड के लिए यह जानना महत्वपूर्ण है कि क्या साइड इफेक्ट्स उत्पन्न होते हैं, इसलिए वे इसे बार-बार कॉल करने से बच सकते हैं। यदि आप परवाह नहीं करते हैं कि यह एक फ़ंक्शन है या नहीं, तो आप इसे मान सकते हैं जैसे कि यह नहीं है।