स्काला की साथी वस्तुओं बनाम स्थिर तरीकों से क्या फायदे हैं?


50

स्काला की कोई स्थैतिक-श्रेणी नहीं है , बल्कि साथी वस्तुओं के माध्यम से समान कार्यक्षमता है। दृश्यों के पीछे साथी वस्तुओं को उन कक्षाओं के लिए संकलित किया जाता है जिनमें स्थिर विधियां होती हैं, इसलिए यह सब वाक्यगत शर्करा है। इस डिजाइन विकल्प के क्या फायदे हैं? नुकसान? क्या अन्य अपक्षय में समान निर्माण होते हैं?


जवाबों:


49

यहां कुछ कारण दिए गए हैं, जो आपकी प्राथमिकताओं के आधार पर आपके लिए अधिक या कम सम्मोहक हो सकते हैं:

  1. बस "सिंटैक्टिक शुगर" होने के लिए इसे छूट न दें। तुम कहते हो सकता है कि कुछ है तो बस एक प्रोग्रामर बस के रूप में अच्छी तरह से एक कॉफी या चाय पीने वाला के रूप में - वाक्यात्मक चीनी, यह सब चीनी हैं जो आपके जीवन sweetens के बाद है।

  2. सिंगलटन - प्रत्येक स्केला objectस्वाभाविक रूप से एक सिंगलटन है। यह मानते हुए कि जावा दुनिया में लोग सभी प्रकार से एकल को लागू कर रहे हैं और अधिक से अधिक बार उनके कार्यान्वयन में कुछ गलती नहीं करने की तुलना में, आप स्काला में उस तरह से एक त्रुटि नहीं कर सकते। लिखने के objectबजाय classयह एक एकल बनाता है और आप कर रहे हैं।

  3. स्थिर तरीकों तक पहुँच: जावा में स्थिर तरीकों को वस्तुओं से पहुँचा जा सकता है। उदाहरण के लिए, मान लें कि आपके पास Cएक स्थिर विधि fऔर एक cप्रकार की वस्तु है C। फिर आपको कॉल करना चाहिएC.f , लेकिन जावा आपको (एक चेतावनी के साथ) का उपयोग करने की अनुमति देता है c.f, जो कि जब आप स्काला पृष्ठभूमि से आते हैं तो वास्तव में कोई मतलब नहीं होता है, क्योंकि वस्तुओं में fवास्तव में एक विधि नहीं होती है।

  4. स्पष्ट पृथक्करण: जावा में आप एक वर्ग में स्थिर और गैर-स्थिर विशेषताओं और विधियों को मिला सकते हैं। यदि आप अनुशासित होकर काम करते हैं, तो यह एक समस्या नहीं बनती है, हालाँकि, यदि आप (या उस मामले के लिए कोई और) ऐसा नहीं करते हैं, तो आप स्थिर और गैर-स्थैतिक भागों के साथ अंतःक्रिया करते हैं और यह त्वरित नज़र में बताना कठिन है क्या स्थिर है और क्या नहीं है। स्काला में, साथी वस्तु के अंदर स्थित सब कुछ स्पष्ट रूप से संबंधित वर्ग की रनटाइम ऑब्जेक्ट्स का हिस्सा नहीं है, लेकिन एक स्थिर संदर्भ से उपलब्ध है। इसके विपरीत, यदि यह एक वर्ग के अंदर लिखा गया है, तो यह उस वर्ग के उदाहरणों के लिए उपलब्ध है, लेकिन एक स्थिर संदर्भ से नहीं। यह जावा में विशेष रूप से बोझिल हो जाता है, एक बार जब आप अपनी कक्षा में स्थिर और गैर-स्थिर इनिशियलाइज़र ब्लॉक जोड़ना शुरू करते हैं। यह गतिशील निष्पादन आदेश के संदर्भ में समझने के लिए बहुत कठिन हो सकता है।

  5. कम कोड: आपको प्रत्येक और प्रत्येक विशेषता या विधि में शब्द को स्थिर करने की आवश्यकता नहीं है object, इस प्रकार कोड को अधिक संक्षिप्त (वास्तव में, एक प्रमुख लाभ वास्तव में नहीं) रखते हुए।

नुकसान खोजने के लिए बहुत कठिन हैं। कोई यह तर्क दे सकता है कि स्थिर और गैर-स्थिर हिस्से एक साथ होने चाहिए, लेकिन साथी वस्तुओं की स्केल अवधारणा से अलग हो जाते हैं। उदाहरण के लिए, वर्ग आरेख के लिए यह अजीब लग सकता है, लेकिन फिर अंत में कोड में दो चीजें बनाने और विच्छेद करने की विशेषता है कि कहां विशेषता है।


1
मैं यह भी पढ़ता हूं, कि स्टैटिक्स शुद्ध OOP सॉफ्टवेयर में नहीं हैं। जैसे, जब आपको स्थैतिक व्यवहार की आवश्यकता होती है, तो स्वयं की कक्षा का उपयोग करें और इसकी एक (सिंगलटन) वस्तु बनाएं, जो किसी अन्य वर्ग की वस्तुओं के (संभवतः) स्थिर व्यवहार का प्रबंधन करता है।
के ..

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

3
1 से 5 तक के अंकों में से कोई भी (और यहां तक ​​कि उन सभी को एक साथ) रनटाइम लागू करने के लिए एक सच्चे साथी ऑब्जेक्ट की आवश्यकता होती है। शून्य रनटाइम प्रभाव के साथ उन सभी को आसानी से शुद्ध सिंटैक्टिक चीनी बनाया जा सकता है। एलेक्सी रोमानोव के जवाब में रनटाइम साथी ऑब्जेक्ट होने का एकमात्र वास्तविक कारण है।
मासमोर्ज़ोव

"नुकसान खोजने के लिए बहुत कठिन हैं।" प्रदर्शन? एक वस्तु विधि तक पहुँचने के ifnonnullसाथ ही, आदि की तुलना में बायटेकोड उत्पन्न करता है invokeStatic
एडुआर्डो परेजा टोबेस

33

एक और लाभ यह है कि objectएस स्थैतिक तरीकों के विपरीत इंटरफेस / लक्षण को लागू कर सकता है।


8
मुझे लगता है कि स्थैतिक तरीकों के साथ एक वर्ग बनाम एक वस्तु वस्तु के बीच यह प्रमुख अंतर है। एक साथी ऑब्जेक्ट बहुरूपी है और इंटरफ़ेस / विशेषता की अपेक्षा करने वाले तरीकों के तर्क के रूप में इसे पास किया जा सकता है।
डस्ट्रो

4

साथी वस्तुओं को पहले स्थान पर खोजा जाता है, उसके बाद, स्कैला, प्रिडिफ़ को देखता है और फिर उस विशेष स्रोत फ़ाइल में स्पष्ट रूप से "आयात" बयानों को देखता है।

मैं यह जानने के लिए जावा देवता के लिए पर्याप्त नहीं हूं कि जावा भाषा या पुस्तकालय किसी भी तुलनात्मक तंत्र को प्रदान करते हैं या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.