Scala में Parameterless और Empty-Paren तरीके


10

मैं इस समय ओडस्की के प्रोग्रामिंग स्केला (2) के माध्यम से स्काला सीख रहा हूं। मैं अध्याय 10 तक हूँ जहाँ वह पैरामीटर रहित और खाली-परिन विधियों की शुरुआत करता है। मैं अभी इसके चारों ओर अपना सिर प्राप्त नहीं कर सकता।

अब तक, मैं समझता हूँ कि अगर किसी विधि के साइड-इफ़ेक्ट्स और पैरामीटर्स रहित तरीके हैं, तो मुझे खाली पारे का उपयोग करना चाहिए।

मैं समझ नहीं पा रहा हूं कि इस सम्मेलन का क्या फायदा है। मैंने स्टैक एक्सचेंज पर पोस्ट पढ़ीं, लेकिन ईमानदार होने के लिए, जब पोस्ट इस विषय पर कुछ गहराई से चर्चा करना शुरू करते हैं तो मैं खो गया था।

मैं इस भाषा की विशेषता के लिए विशिष्ट उपयोग के मामले क्या हैं और इसे बेहतर तरीके से समझने में मेरी मदद करने के लिए क्या फायदे हैं, इसकी एक सरल व्याख्या की तलाश में हूं।

scala 

जवाबों:


14

मैंने आपका सवाल उठाया कि पहली जगह में एक सम्मेलन की आवश्यकता को रोकने के लिए भाषा को क्यों नहीं डिज़ाइन किया गया? दूसरे शब्दों में, क्यों स्काला सिर्फ प्रोग्रामर को कभी-कभी उन्हें छोड़ने की अनुमति देने के बजाय, हर समय कोष्ठक के उपयोग को मजबूर नहीं करता है?

इसका जवाब संदर्भात्मक पारदर्शिता में मिलता है । अनिवार्य रूप से, यदि किसी फ़ंक्शन का कोई दुष्प्रभाव नहीं है, तो प्रोग्राम के व्यवहार को बदलने के बिना, एक फ़ंक्शन कॉल को इसके परिणाम से बदला जा सकता है।

इसका मतलब है कि पैरामीटर या साइड इफेक्ट्स के बिना एक फ़ंक्शन val, उस फ़ंक्शन के रिटर्न वैल्यू को रखने के लिए शब्दार्थ के बराबर है । इस गुण के कारण, जैसा कि एक कक्षा विकसित होती है, प्रोग्रामर सुविधा का उपयोग करते हुए valया किसी फ़ंक्शन का उपयोग करने के बीच आगे-पीछे स्विच कर सकता है ।

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

जब इस वर्ग के सदस्य निश्चित रूप से एक फ़ंक्शन कॉल है, और इसलिए संभवतः संदर्भित पारदर्शी नहीं है , यह स्पष्ट करने के लिए साइड इफेक्ट होने पर सम्मेलन कोष्ठक का सुझाव देता है । कॉलिंग कोड के लिए यह जानना महत्वपूर्ण है कि क्या साइड इफेक्ट्स उत्पन्न होते हैं, इसलिए वे इसे बार-बार कॉल करने से बच सकते हैं। यदि आप परवाह नहीं करते हैं कि यह एक फ़ंक्शन है या नहीं, तो आप इसे मान सकते हैं जैसे कि यह नहीं है।


6

यह एक सम्मेलन है, भाषा डिजाइन का हिस्सा नहीं है। इसका उपयोग साइनपोस्ट के रूप में किया जाता है ताकि उन लोगों की सहायता के लिए जिन्हें आपको इसे बेहतर समझने के लिए कोड लिखना है।

से विधि प्रार्थना पर स्काला का स्टाइल गाइड:

Scala को 0 (कोई तर्क नहीं) के तरीकों पर कोष्ठकों की चूक की अनुमति देता है:

reply() 

// is the same as 

reply

हालांकि, इस सिंटैक्स का उपयोग केवल तब किया जाना चाहिए जब प्रश्न में विधि का कोई साइड-इफेक्ट न हो (विशुद्ध रूप से कार्यात्मक)। दूसरे शब्दों में, कॉल करते समय कोष्ठक को छोड़ना स्वीकार्य होगा queue.size, लेकिन कॉल करते समय नहीं println()

इस सम्मेलन को धार्मिक रूप से देखने से नाटकीय रूप से कोड की पठनीयता में सुधार होगा और यह किसी भी विधि के सबसे बुनियादी संचालन को एक नज़र में समझने में बहुत आसान बना देगा। केवल दो वर्णों को बचाने के लिए कोष्ठकों को छोड़ देने के आग्रह का विरोध करें!

.NET में, कन्वेंशन उन तरीकों का उपयोग करना है जब कोड को चलाने में थोड़ी देर लग सकती है (कहते हैं, 50ms से अधिक), और गुण (अनिवार्य रूप से खाली-पैरा तरीके) जब यह नहीं होगा (यानी यह एक साधारण लुकअप है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.