मैं अभी भी स्काला के लिए अपेक्षाकृत बहुत नया हूँ। मैं स्कैला के सूची कार्यान्वयन के माध्यम से जा रहा था, जहां मैंने देखा कि कार्यान्वयन में बहुत से funcitons अभी भी "var" का उपयोग करते हैं। मैं पढ़ रहा हूं कि स्कैला अधिक कार्यात्मक उन्मुख कैसे है, इसलिए "var" का उपयोग करने के बजाय पुस्तकालय को पूंछ रिकर्सन का उपयोग नहीं करना चाहिए जहां संभव हो।

उदाहरण के लिए एक्ज़िट्स को फिर से लिखा जा सकता है:

@tailrec
def exists[A](f : A => Boolean) : Boolean = this match {
    case Nil => false
    case l:LinearSeq[A]=> if (f(l.head)) true else exists(l.tail,f)
}

कारण मैं पूछता हूं क्योंकि मैं बहुत सारी सामग्री पढ़ रहा हूं जहां इसे "var" का उपयोग करने के लिए हतोत्साहित किया जाता है, लेकिन मुझे लगता है कि सूची कार्यान्वयन में इसका बहुत उपयोग किया जा रहा है।

धन्यवाद!

3
code-ninja-77 12 मार्च 2020, 11:29
2
स्कैला अनुशंसा करता है कि जितना संभव हो सके अपने कार्यक्रमों में राज्य को कम करें। कुछ मामलों में यह प्रदर्शन को कम कर सकता है। तब आप var के साथ परिवर्तनशीलता का उपयोग कर सकते हैं
 – 
Valeriy
12 मार्च 2020, 11:51

3 जवाब

जब आपके पास List जैसा कुछ होता है, जिसका उपयोग लगभग हर स्कैला प्रोग्राम में अक्सर किया जाता है:

  1. यहां तक ​​​​कि एक बहुत ही मामूली गति (या मंदी) का एक बड़ा संचयी प्रभाव हो सकता है;

  2. इसके योगदानकर्ता ऐसे लोग होते हैं जो स्काला के निम्न-स्तरीय विवरणों के बारे में बहुत कुछ जानते हैं (और यदि कुछ नहीं करते हैं, तो उनके पैच की समीक्षा वे लोग करेंगे जो ऐसा करते हैं)।

इसलिए केवल स्कैला सीखने वाले लोगों को दी गई सलाह विशेष रूप से लागू नहीं होती है।

इस विशिष्ट उदाहरण के लिए: @tailrec स्कैला 2.8 तक मौजूद नहीं था, यह कोड शायद पहले लिखा गया था (मैंने जांच नहीं की है) और इसे फिर से लिखने का पर्याप्त कारण नहीं है।

5
Alexey Romanov 12 मार्च 2020, 12:18
2
मैं एक बार नवागंतुकों के लिए युक्तियों और युक्तियों के बारे में एक वार्ता में शामिल हुआ था। (बहुत ही उचित) युक्तियों में से एक था "हमेशा अपने मामले की कक्षाओं को अंतिम बनाएं"। ओडर्स्की वार्ता में भाग ले रहे थे और प्रश्नोत्तर के दौरान उन्होंने उल्लेख किया कि संकलक टीम कभी-कभी इस तथ्य का लाभ उठाती है कि कुछ अनुकूलन के लिए केस क्लास स्वचालित रूप से अंतिम नहीं होते हैं। अंत में, टिप को और अधिक ध्वनि के लिए संशोधित किया गया था जैसे "हमेशा अपने मामले की कक्षाओं को अंतिम बनाएं ... जब तक कि आप यह नहीं जानते कि आप क्या कर रहे हैं।" जो शायद एक अच्छी सामान्य सलाह है। जब तक आप बता सकते हैं कि आप वास्तव में जानते हैं कि आप क्या कर रहे हैं। ;)
 – 
stefanobaghino
12 मार्च 2020, 12:01
1
कार्यात्मक तरीके से कोड को फिर से लिखने का एक अच्छा कारण यह है कि नए स्काला उपयोगकर्ता प्रेरणा के लिए मानक पुस्तकालय को देखते हैं।
 – 
Tim
12 मार्च 2020, 12:14
2
ठीक है, कोई अच्छा पर्याप्त (स्कैला टीम के मुताबिक) कारण नहीं है :)
 – 
Alexey Romanov
12 मार्च 2020, 12:20

मानक पुस्तकालय के डिजाइनरों ने शुद्धता पर प्रदर्शन को चुना।

मुख्य नकारात्मक पक्ष यह है कि शुद्ध कार्यात्मक कोड लिखने के तरीके के बारे में सीखने के लिए मानक पुस्तकालय एक अच्छा संसाधन नहीं है।

एक दूसरा नकारात्मक पहलू यह है कि यह शुद्ध कार्यात्मक कोड को अनुकूलित करने के लिए संकलक के प्रोत्साहन को कम करता है, क्योंकि यह मूल पुस्तकालय को प्रभावित नहीं करता है।

4
Tim 12 मार्च 2020, 12:13

कुंद कारण आमतौर पर प्रदर्शन है। इस तर्क के साथ कि स्थानीय (!) var एफपी को नहीं तोड़ते हैं और फिर भी संगामिति को काम करने देते हैं।

इस मामले में, कारण शायद एक और है। कार्यान्वयन गैर-सूचियों के लिए भी काम करता है, केवल IterableOnce विधियों का उपयोग करता है।

2
cbley 12 मार्च 2020, 12:24