मैं कोटलिन सीख रहा हूं, लेकिन मुझे सरल प्रश्नों के सीधे उत्तर नहीं मिल रहे हैं। मुझे लगता है कि यह इतना नया है, अभी तक किसी को भी स्पष्ट प्रश्न पूछने का मौका नहीं मिला है। तो यहाँ जाता है।

जब मैं किसी श्रेणी में सबसे छोटी वस्तु प्राप्त करना चाहता हूं, तो मैं टाइप करता हूं:

range.start

लेकिन मुझे चेतावनी मिलती है, "इसे अनबॉक्स किए गए first" से बदला जा सकता है। निश्चित नहीं है कि अनबॉक्स्ड का क्या अर्थ है--अनुमान भी नहीं लगा सकते। लेकिन जब मैं इस आदेश का उपयोग करता हूं:

range.first

चेतावनी चली जाती है। यहाँ क्या हो रहा है? क्या मुझे भी चिंतित होना चाहिए? कोटलिन के पास प्रारंभ और प्रथम दोनों ही क्यों हैं?

4
Scott Biggs 8 अप्रैल 2020, 05:09

1 उत्तर

सबसे बढ़िया उत्तर

बॉक्सिंग और अनबॉक्सिंग एक वर्ग में एक आदिम मूल्य को लपेटने के लिए संदर्भित करता है, इसलिए इसे सामान्य वर्गों और कार्यों के साथ या एक अशक्त के रूप में उपयोग किया जा सकता है। जावा में, यह अधिक पारदर्शी है क्योंकि प्रत्येक प्रकार के चर के आदिम और बॉक्सिंग संस्करणों के अलग-अलग नाम हैं (यानी int और Integer), जबकि कोटलिन में यह बहुत स्पष्ट नहीं है। यदि आपका वेरिएबल शून्य है, जैसे Int?, तो इसे हमेशा बॉक्स किया जाता है, लेकिन यदि यह गैर-शून्य है, तो इसे केवल तभी बॉक्स किया जाता है जब यह किसी ऐसे फ़ंक्शन को पास किया जाता है जो सामान्य है या एक शून्य संस्करण का अनुरोध करता है। तो मुक्केबाजी एक क्रिया के रूप में एक वर्ग में लपेटे जाने वाले चर को संदर्भित करता है, जिस समय इसे किसी बॉक्सिंग संस्करण की आवश्यकता होती है।

एक सामान्य श्रेणी के लिए एक इंटरफ़ेस है जिसे ClosedRange कहा जाता है। जब आप पूर्णांक श्रेणियों के साथ काम कर रहे होते हैं, तो आप IntRange नामक एक वर्ग का उपयोग कर रहे होते हैं जो ClosedRange<Int> को भी लागू करता है।

जब आप start जैसे सामान्य इंटरफ़ेस के गुणों का उपयोग करते हैं, तो JVM को आपके Int मान को बॉक्स और अनबॉक्स करना होता है। ऐसा इसलिए है क्योंकि जेनरिक का उपयोग गैर-बॉक्स वाले आदिम के साथ नहीं किया जा सकता है। आदिम को बॉक्स और अनबॉक्स करने के लिए रनटाइम ओवरहेड की एक छोटी राशि है।

वास्तविक वर्ग IntRange श्रेणी के प्रारंभ और अंत के मानों को आदिम के रूप में संग्रहीत करता है, इसलिए यदि आप उन्हें सीधे first के साथ एक्सेस करते हैं, तो आप उस बॉक्सिंग को बायपास कर सकते हैं जो तब होती है जब आप जेनेरिक इंटरफ़ेस प्रॉपर्टी से गुजरते हैं, एक छोटे से प्रदर्शन लाभ के लिए।

अधिकांश मामलों में, प्रदर्शन अंतर वैसे भी नगण्य होगा, लेकिन डिफ़ॉल्ट कोड निरीक्षण आपको अधिक प्रदर्शन करने वाले तरीके का उपयोग करने की सलाह देता है।

9
Tenfour04 8 अप्रैल 2020, 02:25