यह कंपाइलर (और भाषा) की जटिलता को बढ़ाएगा। ऐसा कुछ करने पर टाइप अनुमान लगाने के लिए यह वास्तव में बहुत ही मजेदार है। जैसा कि किसी भी प्रकार के अनुमान से संबंधित है, जब आपके पास एक अभिव्यक्ति होती है तो यह सब बेहतर काम करता है। बिखरे हुए रिटर्न स्टेटमेंट प्रभावी ढंग से बहुत सारी अंतर्निहित शाखाएं बनाते हैं जो एकजुट होने के लिए बहुत चिपचिपा हो जाते हैं। ऐसा नहीं है कि यह विशेष रूप से हार्ड है, बस चिपचिपा है। उदाहरण के लिए:
def foo(xs: List[Int]) = xs map { i => return i; i }
क्या मैं आपसे पूछता हूं, क्या संकलक यहां अनुमान लगाता है? यदि संकलक स्पष्ट रिटर्न स्टेटमेंट के साथ अनुमान लगा रहा था, तो उसे Any
होना चाहिए। वास्तव में, स्पष्ट वापसी विवरणों के साथ कई विधियां Any
लौटती रहेंगी, भले ही आपको गैर-स्थानीय रिटर्न के साथ छेड़छाड़ न हो। जैसे मैंने कहा, चिपचिपा।
और इसके शीर्ष पर, यह एक भाषा सुविधा नहीं है जिसे प्रोत्साहित किया जाना चाहिए। स्पष्ट रिटर्न कोड स्पष्टता में सुधार नहीं करता है जब तक कि केवल एक स्पष्ट वापसी न हो और फ़ंक्शन के अंत में। कारण यह देखने में बहुत आसान है कि क्या आप निर्देशित ग्राफ़ के रूप में कोड पथ देखते हैं। जैसा कि मैंने पहले कहा था, बिखरे हुए रिटर्न कई अंतर्निहित शाखाओं का उत्पादन करते हैं जो आपके ग्राफ पर अजीब पत्तियों का उत्पादन करते हैं, साथ ही मुख्य शरीर में बहुत से अतिरिक्त पथ भी पैदा करते हैं। यह सिर्फ फंकी है। नियंत्रण प्रवाह यह देखने के लिए बहुत आसान है कि आपकी शाखाएं सभी स्पष्ट हैं (पैटर्न मिलान या if
अभिव्यक्तियां) और यदि आप मान उत्पन्न करने के लिए साइड-इफेक्टिंग return
कथन पर भरोसा नहीं करते हैं तो आपका कोड अधिक कार्यात्मक होगा।
तो, स्काला में कई अन्य "हतोत्साहित" विशेषताओं (उदा asInstanceOf
बल्कि as
की तुलना में) की तरह है, भाषा के डिजाइनर चीजों कम सुखद बनाने के लिए सोच-समझकर चुनाव किया। यह उस जटिलता के साथ संयुक्त है जो इसे प्रकार के अनुमान और परिणामों के व्यावहारिक बेकारता के साथ परिदृश्यों के सबसे अधिक प्रतिस्पर्धा में पेश करता है। यह इस तरह के अनुमान की कोशिश करने के लिए स्केलेक के लिए कोई समझ नहीं आता है।
कहानी का नैतिक: अपने रिटर्न को तितर-बितर न करना सीखें! स्कैला न सिर्फ किसी भी भाषा में यह अच्छी सलाह है।
स्रोत
2011-09-05 04:36:16
हाय डैनियल। मुझे आपकी व्याख्या नहीं मिली है। स्केल को पहले से ही कई अभिव्यक्तियों और निकास बिंदुओं को कार्यों में जोड़ना है क्योंकि/अन्य कथन के कारण। और स्कैला भाषा में बहुत सी जटिल जटिल चीजें हैं जो आईएमओ अधिकतर स्कैला प्रोग्रामर बहुत अच्छी तरह से समझते हैं या उपयोग नहीं करते हैं (जैसे कॉन्वर्सिस/contravariance, संरचनात्मक प्रकार, आदि)। यह संकलक के लिए बहुत जटिलता जोड़ता है; इसलिए "संकलक को अधिक जटिल बनाता है" एक कमजोर जवाब लगता है। –
@ उर्बान वागाबॉन्ड आप "सिर होने के लिए लाभ" भाग से चूक गए। सिर्फ इसलिए कि कुछ जटिल है इसका मतलब यह नहीं है कि इसमें अधिक जटिलता जोड़ने लायक है। अब, स्कैला को एकाधिक अभिव्यक्तियों और निकास बिंदुओं को गठबंधन करने की ज़रूरत नहीं है, अगर/अन्य कथन है क्योंकि यदि/else एक अभिव्यक्ति है, बयान नहीं। यह बाल बांटने की तरह प्रतीत हो सकता है, लेकिन अंतर बहुत असली है। –