कोटलिन में कोई स्थिर कीवर्ड क्यों नहीं है?


29

कोटलिन को मुख्य रूप से जावा के लिए एक ड्रॉप-इन प्रतिस्थापन के रूप में जाना जाता है, लेकिन यह एक प्रसिद्ध जावा निर्माण से छुटकारा दिलाता है: staticकीवर्ड। इसके बजाय, क्लास-स्तरीय कार्यक्षमता मुख्य रूप से साथी वस्तुओं द्वारा पेश की जाती है।

स्थैतिक तरीकों और क्षेत्रों के साथ गलत क्या है जो साथी वस्तुओं को एक बेहतर विकल्प प्रदान करता है? मैं तर्क के बारे में उलझन में हूँ, और प्रलेखन में कोई स्पष्टीकरण नहीं मिल सका।


4
किसी ऐसे व्यक्ति के रूप में जो स्कैला में प्रोग्राम करता है, उसे देखते हुए: साथी ऑब्जेक्ट्स को स्थिर और गैर-स्थिर विधियों के लिए कोड को अलग करता है, वे अन्य कक्षाओं या इंटरफेस को एक स्थिर संदर्भ में विस्तारित कर सकते हैं, और आप एक चर में साथी ऑब्जेक्ट को संदर्भित कर सकते हैं। यकीन नहीं है कि कैसे कोटलिन के नक्शे हालांकि
फीनिक्स

क्या स्थैतिक तरीकों और साथी वस्तुओं पर कोई महत्वपूर्ण लाभ नहीं है?
टान्नर स्विट

यह कारण नहीं है, अधिक अवलोकन, लेकिन मैंने देखा है कि जैसे ही (निरपेक्ष) शुरुआती प्रोग्रामर staticजावा में कीवर्ड की खोज करते हैं , यह तुरंत कार्यक्रम के सभी कोनों में फैल जाता है क्योंकि उन्हें अभी तक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग नहीं सिखाई गई है ।
स्कोर_उंडर

जवाबों:


30

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


2
ये एक अच्छा बिंदु है। और मैंने हमेशा सोचा था कि यह अजीब था कि एकल और स्टैटिक्स हैं जो बहुत समान व्यवहार करते हैं, लेकिन कुछ भी नहीं बल्कि साथी वस्तुओं के साथ, यह उस वैचारिक विषमता को दूर करता है।
user1446

1
और यही कारण है कि जावा में मैं स्थिर तरीकों को परिभाषित करने के बजाय सांख्यिकीय रूप से निर्मित स्टेटलेस वस्तुओं पर तरीकों को परिभाषित करना पसंद करता हूं।
कैंडिड_ओरेंज

13

कोटलिन संदर्भ डॉक्स से उद्धृत :

ध्यान दें कि, भले ही साथी वस्तुओं के सदस्य अन्य भाषाओं में स्थिर सदस्यों की तरह दिखते हों, पर वे अभी भी वास्तविक वस्तुओं के सदस्य हैं और उदाहरण के लिए, इंटरफेस को लागू कर सकते हैं।

मुझे बहुत अच्छा लगता है जैसे कोटलिन के डिजाइनर इसे जावा के स्टैटिक सदस्यों से अधिक लाभ के रूप में देखते हैं।

इसके अलावा, जावा इंटरऑपरेबिलिटी और स्थिर सदस्यों के बारे में यह बताता है कि कैसे सदस्य वस्तुओं का उपयोग उन सदस्यों को बनाने के लिए किया जा सकता है जो एनोटेट के साथ प्रभावी रूप से स्थैतिक सदस्यों की तरह व्यवहार करते हैं @JvmStatic


6

कोटलिन एक वस्तु-उन्मुख भाषा है। ऑब्जेक्ट-ओरिएंटेड भाषा में, किसी वस्तु का होना एक अत्यंत भयावह प्रतिबंध है। कक्षाएं नहीं वस्तुओं रहे हैं, लेकिन वस्तुओं वस्तुओं रहे हैं, तो सवाल नहीं बल्कि होना चाहिए (ओह!): क्यों एक भाषा होता नहीं साथी वस्तुओं का उपयोग करें?

एक और पहलू सादगी है: दो चीजें क्यों हैं, उदाहरण के सदस्यों के साथ ऑब्जेक्ट और स्थिर सदस्यों के साथ कक्षाएं जब आप सिर्फ उदाहरण के सदस्यों के साथ ऑब्जेक्ट हो सकते हैं?

एक विकल्प जो कई स्मॉलटॉक-व्युत्पन्न भाषाओं में उपयोग किया जाता है, वह कक्षाओं को स्वयं ऑब्जेक्ट बनाने के लिए है। उदाहरण के लिए स्मॉलटाक क्लासेस में मेटाक्लासेस के समानांतर पदानुक्रम के उदाहरण हैं । रूबी में, कक्षाएं कक्षा के उदाहरण हैं Class(और हां, इसका मतलब है कि इसका Classएक उदाहरण है)। उस स्थिति में, "क्लास मेथड्स" वास्तव में क्लास के मेटाक्लस के सामान्य उदाहरण के तरीके हैं। मुझे नहीं पता कि इस डिज़ाइन को जावा में क्यों नहीं चुना गया (स्मालटाक के संबंध में इसका करीबी विवरण दिया गया है), लेकिन इसका प्रकार प्रणाली को सरल बनाने के साथ कुछ हो सकता है (ध्यान दें कि अधिकांश भाषाएं कक्षा-जैसी-वस्तुओं के लिए होती हैं) गतिशील भाषाएं)।


1
"एक और पहलू सादगी है: दो चीजें क्यों हैं, उदाहरण के सदस्यों के साथ ऑब्जेक्ट और स्थिर सदस्यों के साथ वर्ग जब आप सिर्फ उदाहरण के सदस्यों के साथ ऑब्जेक्ट हो सकते हैं?": अच्छी बात है, भले ही सभी भाषाओं / भाषा डिजाइनरों का उद्देश्य अतिसूक्ष्मवाद नहीं है। कुछ इसे विशेष मामलों या मुहावरों के लिए तदर्थ निर्माण के लिए एक लाभ के रूप में देखते हैं।
जियोर्जियो

1
मुझे लगता है कि यह कम से कम तर्कपूर्ण है कि जावा उस पैटर्न को लागू करता है (कुछ हद तक)। उदाहरण के लिए, यदि आपके पास MyStaticClassकुछ staticसदस्य हैं, तो आप उस वर्ग के लिए MyStaticClass.classएक Classउदाहरण प्राप्त कर सकते हैं । फिर आप अपने staticसदस्यों तक पहुंचने / आह्वान करने के लिए प्रतिबिंब का उपयोग कर सकते हैं। यह अभी भी सच है कि staticसदस्य वास्तव में किसी भी वस्तु उदाहरण से नहीं जुड़े हैं (कम से कम वैचारिक रूप से, सुनिश्चित नहीं हैं कि जावा वास्तव में कवर के तहत क्या करता है)। लेकिन इसका मतलब यह है कि स्वीकृत उत्तर में कम से कम कुछ सीमाएं सख्ती से लागू नहीं होती हैं।
एरोथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.