मुझे लगता है कि छाया चर का उपयोग करने के लिए बहुत खतरनाक हैं। स्कैला इस भाषा का निर्माण क्यों करती है? इसके लिए कुछ मजबूत कारण होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।स्कैला छाया चर का समर्थन क्यों करता है?
उत्तर
बस एक चेतावनी के रूप में: एक चर, विधि, या प्रकार छाया अन्य चर, विधि, या एक ही नाम है, जब यह एक आंतरिक दायरे में घोषित किया जाता है, यह असंभव बाहरी का उल्लेख करने के बनाने के प्रकार के लिए कहा जाता है एक अयोग्य तरीके से स्कोप इकाई (या, कभी-कभी, बिल्कुल)। जावा की तरह स्कैला, छायांकन की अनुमति देता है।
एक संभावित कारण यह है कि मैं देख सकता था कि स्कैला में, अक्सर कई घोंसले वाले स्कोप होते हैं, जिनमें से प्रत्येक अपेक्षाकृत छोटा होता है (जैसे जावा या सी ++)। दरअसल, एक ब्लॉक कहीं भी शुरू हो सकता है जहां अभिव्यक्ति की उम्मीद है, इस प्रकार एक नया दायरा शुरू हो रहा है। आंतरिक क्षेत्रों में छायांकन नामों का उपयोग इस प्रकार, औसतन, उनकी घोषणा के करीब और कम संदिग्ध है।
इसके अलावा, इनलाइन क्लोजर अक्सर प्रोग्रामर को नए चर नामों की आवश्यकता होती है जो पहले से भीड़ में है। छायांकन की अनुमति देने से भी वर्णनात्मक नामों का उपयोग जारी रखने की अनुमति मिलती है जो कि बिंदु पर पर्याप्त रूप से हैं, भले ही वे पहले से ही इस्तेमाल किए गए नाम के समान हैं, अन्य अजीब नामों का आविष्कार करने के बजाय - my
, local
, या (खराब) _
या एकल के साथ उन्हें उपसर्ग करना -जलेटर नाम ...
छायांकन अच्छी आईडीई के साथ एक समस्या से कम हो जाता है जो उदाहरण के लिए हो सकता है अपने स्रोत कोड में कर्सर के नीचे परिवर्तनीय की घोषणा, और संदर्भों में हाइलाइट करें।
बस मेरे दो यहाँ सेंट ...
विस्तृत प्रतिक्रिया के लिए और एक अनुस्मारक के लिए धन्यवाद जो मैंने प्रदान नहीं किया था। मैंने बंद संदर्भ संदर्भ में परिवर्तनीय छाया के बारे में सोचा है। आप सही हैं कि कुछ डेवलपर कुछ नए नाम देने के बजाय क्लोजर के दायरे में समान नामों का उपयोग कर सकते हैं। मुझे लगता है कि इन डेवलपर्स को इसे उपयोग में अधिक आरामदायक महसूस होता है। लेकिन क्या यह एक छिपी खतरा नहीं है? मैं मानता हूं कि शॉर्ट-स्कोप चर के नामों का उपसर्ग सही दिखता नहीं है। लेकिन यह ज्यादातर मामलों में कोड को समझना आसान बनाता है (विशेष रूप से स्कैला न्यूबीज के लिए)। यदि मैं गलत हूं तो मुझे सही करों। –
मुझे लगता है कि छाया चर उन्हें इस्तेमाल करने के लिए बहुत खतरनाक हैं।
आप जो कुछ भी चाहते हैं उसे सोचने के हकदार हैं। हालांकि, चूंकि आपने कोई डेटा, अध्ययन या यहां तक कि कारण प्रदान नहीं किए हैं, इसलिए राय का कोई मूल्य नहीं है।
स्कैला इस भाषा का निर्माण क्यों करता है?
क्योंकि यह उपयोगी है। प्रोग्रामर को मनमाने ढंग से पहचानकर्ता नामों का आविष्कार करने की आवश्यकता नहीं है क्योंकि गुंजाइश में कुछ पहचानकर्ता पहले ही इसका उपयोग कर रहे हैं।
यह वाइल्डकार्ड आयात को और भी उपयोगी बनाता है, क्योंकि यह एक संकलन तोड़ने का मौका हटा देता है क्योंकि किसी तीसरे पक्ष ने एक पहचानकर्ता जोड़ा है जिसका आप उपयोग कर रहे हैं।
इसके लिए कुछ मजबूत कारण होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।
इसके लिए एक मजबूत कारण क्यों होना चाहिए? इसके फायदे हैं, और नुकसान की अनुपस्थिति में (आपने कोई भी प्रस्तुत नहीं किया है), यह पर्याप्त है।
संपादित
जवाब में नुकसान को बताया गया है, मुझे कहना पड़ेगा कि छाया की एक विशेष मामला है। छायांकन आयात में सब कुछ भी प्रभावित करता है, या तो import
कथन के माध्यम से या नेस्टेड package
कथन, और एक ही पैकेज में मौजूद सभी चीज़ों के माध्यम से।
के कुछ उदाहरण देखते हैं:
// Not allowed, because it shadows List
import java.util._
class A {
// Not allowed, because it shadows this, hashCode, equals, toString
class B
}
कि एक बहुत ही कष्टप्रद भाषा के लिए होगा।
छाया चर के खतरे प्रारंभिक प्रश्न में इसका वर्णन करने के लिए बहुत स्पष्ट है। बीटीडब्ल्यू ** मैंने जीन-फिलिप के जवाब पर टिप्पणी में इसके बारे में लिखा है (शायद आपने इसे पढ़ा नहीं है)। लेकिन विशेष रूप से आपके लिए मैं दोहरा दूंगा। –
जब कोई किसी दायरे में एक चर घोषित करता है और इस चर के पास बाहरी दायरे में एक ही नाम होता है, तो वह कोड को और अधिक जटिल बनाता है। इन चरों में से प्रत्येक के अर्थ को ट्रैक करना बहुत कठिन है। यहां 'प्रोग्रामिंग इन स्कैला' से एक अच्छा उद्धरण दिया गया है: "ध्यान रखें कि ऐसा कोड पाठकों के लिए बहुत भ्रमित हो सकता है, क्योंकि वेरिएबल नाम नेस्टेड स्कॉप्स में नए अर्थों को अपनाते हैं। आमतौर पर एक नया, सार्थक चर नाम चुनना बेहतर होता है। बाहरी चर को छाया करने के लिए। " –
@keykeeper ठीक है, मैंने उस तर्क का उत्तर दिया है। –
- 1. क्या स्कैला समर्थन पूंछ रिकर्सन ऑप्टिमाइज़ेशन का समर्थन करता है?
- 2. स्कैला एक्सएमएल समर्थन कैसे काम करता है?
- 3. जावा समर्थन और ऑटोबॉक्सिंग का समर्थन क्यों नहीं करता है?
- 4. जीसीसी समर्थन नग्न कार्यों का समर्थन क्यों नहीं करता है?
- 5. क्या उद्देश्य-सी वर्ग वर्ग चर का समर्थन करता है?
- 6. हास्केल का डेटा क्यों नहीं है। समर्थन अनंत सेट का समर्थन करता है?
- 7. auto_ptr का समर्थन क्यों नहीं करता है -> *()
- 8. XmlSerializer शब्दकोश का समर्थन क्यों नहीं करता है?
- 9. मेरा आईई 9 कैनवास का समर्थन क्यों नहीं करता है?
- 10. क्यों std :: queue स्पष्ट() फ़ंक्शन का समर्थन नहीं करता है?
- 11. जावा सूची इंटरफ़ेस getLast() का समर्थन क्यों नहीं करता है?
- 12. एंटिटी फ्रेमवर्क ओडीबीसी का समर्थन क्यों नहीं करता है?
- 13. `getattr` लगातार गुण पुनर्प्राप्ति का समर्थन क्यों नहीं करता है?
- 14. एफ # नेस्टेड कक्षाओं का समर्थन क्यों नहीं करता है?
- 15. आईआईएस क्यों चंक ट्रांसफर एन्कोडिंग का समर्थन नहीं करता है?
- 16. एसक्यूएल सर्वर सीई वर्चर्स का समर्थन क्यों नहीं करता है?
- 17. पर्यवेक्षण चयन क्यों बड़े बदलावों का समर्थन नहीं करता है?
- 18. क्या cocos2d एआरसी का समर्थन करता है?
- 19. जावास्क्रिप्ट उछाल चर क्यों करता है?
- 20. jQuery इवेंट मॉडल इवेंट कैप्चर का समर्थन क्यों नहीं करता है और केवल इवेंट बबलिंग का समर्थन करता है
- 21. क्या जावा चर वैरिएबल चर का समर्थन करता है? इस तरह PHP में के रूप में
- 22. लॉन्च कॉन्फ़िगरेशन में intellij समर्थन चर करता है?
- 23. स्थानीय चर के साथ जावास्क्रिप्ट समर्थन बंद नहीं करता है?
- 24. स्कैला: सूची क्यों नहीं है [=> Int] काम करता है?
- 25. स्कैला में पैटर्न मिलान क्यों चर के साथ काम नहीं करता है?
- 26. क्या tryhaskell.org समर्थन परिभाषाओं का समर्थन करता है?
- 27. सी ++ 11 अज्ञात structs का समर्थन क्यों नहीं करता है, जबकि सी 11 करता है?
- 28. WPF क्यों C++ का समर्थन नहीं करता है। नेट - WinForms जिस तरह से करता है?
- 29. लॉगबैक समर्थन log4j appenders समर्थन करता है?
- 30. क्या एसक्यूएलकेमी कैशिंग का समर्थन करता है?
मैंने एक ही चीज़ के बारे में सोचा है। शायद ओडर्स्की एट अल ने बिना किसी विचार के जावा से व्यवहार किया। – laher
मेरा मानना है कि श्री ओडर्सकी के पास किसी विशेष भाषा निर्माण के बारे में निर्णय लेने के लिए कुछ प्रेरणा है। :) –
:) काफी मेला। मुझे लगता है कि उसने सोचा कि एक कंपाइलर चेतावनी पर्याप्त होगी। मैं देख सकता हूं कि स्केलेक एक कंपाइलर विकल्प लेता है -वेर्न-शेडिंग, इसलिए संभवतः आईडीई भी इसका समर्थन करते हैं। – laher