2011-08-11 14 views
5

मुझे लगता है कि छाया चर का उपयोग करने के लिए बहुत खतरनाक हैं। स्कैला इस भाषा का निर्माण क्यों करती है? इसके लिए कुछ मजबूत कारण होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।स्कैला छाया चर का समर्थन क्यों करता है?

+1

मैंने एक ही चीज़ के बारे में सोचा है। शायद ओडर्स्की एट अल ने बिना किसी विचार के जावा से व्यवहार किया। – laher

+0

मेरा मानना ​​है कि श्री ओडर्सकी के पास किसी विशेष भाषा निर्माण के बारे में निर्णय लेने के लिए कुछ प्रेरणा है। :) –

+0

:) काफी मेला। मुझे लगता है कि उसने सोचा कि एक कंपाइलर चेतावनी पर्याप्त होगी। मैं देख सकता हूं कि स्केलेक एक कंपाइलर विकल्प लेता है -वेर्न-शेडिंग, इसलिए संभवतः आईडीई भी इसका समर्थन करते हैं। – laher

उत्तर

20

बस एक चेतावनी के रूप में: एक चर, विधि, या प्रकार छाया अन्य चर, विधि, या एक ही नाम है, जब यह एक आंतरिक दायरे में घोषित किया जाता है, यह असंभव बाहरी का उल्लेख करने के बनाने के प्रकार के लिए कहा जाता है एक अयोग्य तरीके से स्कोप इकाई (या, कभी-कभी, बिल्कुल)। जावा की तरह स्कैला, छायांकन की अनुमति देता है।

एक संभावित कारण यह है कि मैं देख सकता था कि स्कैला में, अक्सर कई घोंसले वाले स्कोप होते हैं, जिनमें से प्रत्येक अपेक्षाकृत छोटा होता है (जैसे जावा या सी ++)। दरअसल, एक ब्लॉक कहीं भी शुरू हो सकता है जहां अभिव्यक्ति की उम्मीद है, इस प्रकार एक नया दायरा शुरू हो रहा है। आंतरिक क्षेत्रों में छायांकन नामों का उपयोग इस प्रकार, औसतन, उनकी घोषणा के करीब और कम संदिग्ध है।

इसके अलावा, इनलाइन क्लोजर अक्सर प्रोग्रामर को नए चर नामों की आवश्यकता होती है जो पहले से भीड़ में है। छायांकन की अनुमति देने से भी वर्णनात्मक नामों का उपयोग जारी रखने की अनुमति मिलती है जो कि बिंदु पर पर्याप्त रूप से हैं, भले ही वे पहले से ही इस्तेमाल किए गए नाम के समान हैं, अन्य अजीब नामों का आविष्कार करने के बजाय - my, local, या (खराब) _ या एकल के साथ उन्हें उपसर्ग करना -जलेटर नाम ...

छायांकन अच्छी आईडीई के साथ एक समस्या से कम हो जाता है जो उदाहरण के लिए हो सकता है अपने स्रोत कोड में कर्सर के नीचे परिवर्तनीय की घोषणा, और संदर्भों में हाइलाइट करें।

बस मेरे दो यहाँ सेंट ...

+1

विस्तृत प्रतिक्रिया के लिए और एक अनुस्मारक के लिए धन्यवाद जो मैंने प्रदान नहीं किया था। मैंने बंद संदर्भ संदर्भ में परिवर्तनीय छाया के बारे में सोचा है। आप सही हैं कि कुछ डेवलपर कुछ नए नाम देने के बजाय क्लोजर के दायरे में समान नामों का उपयोग कर सकते हैं। मुझे लगता है कि इन डेवलपर्स को इसे उपयोग में अधिक आरामदायक महसूस होता है। लेकिन क्या यह एक छिपी खतरा नहीं है? मैं मानता हूं कि शॉर्ट-स्कोप चर के नामों का उपसर्ग सही दिखता नहीं है। लेकिन यह ज्यादातर मामलों में कोड को समझना आसान बनाता है (विशेष रूप से स्कैला न्यूबीज के लिए)। यदि मैं गलत हूं तो मुझे सही करों। –

18

मुझे लगता है कि छाया चर उन्हें इस्तेमाल करने के लिए बहुत खतरनाक हैं।

आप जो कुछ भी चाहते हैं उसे सोचने के हकदार हैं। हालांकि, चूंकि आपने कोई डेटा, अध्ययन या यहां तक ​​कि कारण प्रदान नहीं किए हैं, इसलिए राय का कोई मूल्य नहीं है।

स्कैला इस भाषा का निर्माण क्यों करता है?

क्योंकि यह उपयोगी है। प्रोग्रामर को मनमाने ढंग से पहचानकर्ता नामों का आविष्कार करने की आवश्यकता नहीं है क्योंकि गुंजाइश में कुछ पहचानकर्ता पहले ही इसका उपयोग कर रहे हैं।

यह वाइल्डकार्ड आयात को और भी उपयोगी बनाता है, क्योंकि यह एक संकलन तोड़ने का मौका हटा देता है क्योंकि किसी तीसरे पक्ष ने एक पहचानकर्ता जोड़ा है जिसका आप उपयोग कर रहे हैं।

इसके लिए कुछ मजबूत कारण होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।

इसके लिए एक मजबूत कारण क्यों होना चाहिए? इसके फायदे हैं, और नुकसान की अनुपस्थिति में (आपने कोई भी प्रस्तुत नहीं किया है), यह पर्याप्त है।

संपादित

जवाब में नुकसान को बताया गया है, मुझे कहना पड़ेगा कि छाया की एक विशेष मामला है। छायांकन आयात में सब कुछ भी प्रभावित करता है, या तो import कथन के माध्यम से या नेस्टेड package कथन, और एक ही पैकेज में मौजूद सभी चीज़ों के माध्यम से।

के कुछ उदाहरण देखते हैं:

// Not allowed, because it shadows List 
import java.util._ 

class A { 
    // Not allowed, because it shadows this, hashCode, equals, toString 
    class B 
} 

कि एक बहुत ही कष्टप्रद भाषा के लिए होगा।

+1

छाया चर के खतरे प्रारंभिक प्रश्न में इसका वर्णन करने के लिए बहुत स्पष्ट है। बीटीडब्ल्यू ** मैंने जीन-फिलिप के जवाब पर टिप्पणी में इसके बारे में लिखा है (शायद आपने इसे पढ़ा नहीं है)। लेकिन विशेष रूप से आपके लिए मैं दोहरा दूंगा। –

+4

जब कोई किसी दायरे में एक चर घोषित करता है और इस चर के पास बाहरी दायरे में एक ही नाम होता है, तो वह कोड को और अधिक जटिल बनाता है। इन चरों में से प्रत्येक के अर्थ को ट्रैक करना बहुत कठिन है। यहां 'प्रोग्रामिंग इन स्कैला' से एक अच्छा उद्धरण दिया गया है: "ध्यान रखें कि ऐसा कोड पाठकों के लिए बहुत भ्रमित हो सकता है, क्योंकि वेरिएबल नाम नेस्टेड स्कॉप्स में नए अर्थों को अपनाते हैं। आमतौर पर एक नया, सार्थक चर नाम चुनना बेहतर होता है। बाहरी चर को छाया करने के लिए। " –

+0

@keykeeper ठीक है, मैंने उस तर्क का उत्तर दिया है। –

संबंधित मुद्दे