C ++ को C से असली नीले रंग के ऑपरेटर मिलते हैं। मेरा मतलब है कि 6 + 4 में "+" बहुत खास है। उदाहरण के लिए, आप उस + फ़ंक्शन के लिए एक संकेतक प्राप्त नहीं कर सकते।
दूसरी तरफ स्काला के पास उस तरह से ऑपरेटर नहीं हैं। यह सिर्फ गैर-शब्द प्रतीकों के लिए पूर्वता में निर्मित बिट नामों को परिभाषित करने में बहुत लचीलापन है। इसलिए तकनीकी रूप से स्काला में ऑपरेटर ओवरलोडिंग नहीं है।
जो भी आप इसे कॉल करना चाहते हैं, ऑपरेटर ओवरलोडिंग स्वाभाविक रूप से खराब नहीं है, यहां तक कि सी ++ में भी। समस्या तब होती है जब खराब प्रोग्रामर इसका दुरुपयोग करते हैं। लेकिन स्पष्ट रूप से, मेरी राय है कि प्रोग्रामर को ओवरलोडिंग के दुरुपयोग के लिए प्रोग्रामर की क्षमता को हटाने के लिए सभी चीजों को ठीक करने की बाल्टी में एक बूंद नहीं डालनी चाहिए जो प्रोग्रामर दुरुपयोग कर सकते हैं। असली जवाब मेंटरिंग है। http://james-iry.blogspot.com/2009/03/operator-overloading-ad-absurdum.html
कोई भी कम नहीं, C ++ के ऑपरेटर ओवरलोडिंग और स्काला के लचीले तरीके के नामकरण के बीच अंतर हैं, जो IMHO, Scala को कम अपमानजनक और अधिक अपमानजनक बनाते हैं।
C ++ में इन-फिक्स नोटेशन प्राप्त करने का एकमात्र तरीका ऑपरेटरों का उपयोग कर रहा है। अन्यथा आपको object.message (तर्क) या पॉइंटर-> मैसजेज (तर्क) या फ़ंक्शन (तर्क 1, तर्क 2) का उपयोग करना चाहिए। इसलिए यदि आप अपने कोड के लिए एक निश्चित डीएसएलिश शैली चाहते हैं तो ऑपरेटरों का उपयोग करने का दबाव है।
स्काला में आप किसी भी संदेश भेजने के साथ infix संकेतन प्राप्त कर सकते हैं। "ऑब्जेक्ट संदेश तर्क" पूरी तरह से ठीक है, जिसका अर्थ है कि आपको केवल इन्फिक्स नोटेशन प्राप्त करने के लिए गैर-शब्द प्रतीकों का उपयोग करने की आवश्यकता नहीं है।
C ++ ऑपरेटर ओवरलोडिंग अनिवार्य रूप से C ऑपरेटरों तक सीमित है। सीमा के साथ संयुक्त है कि केवल ऑपरेटरों का उपयोग किया जा सकता है infix, जो लोगों पर दबाव डालता है कि "+" और ">>" जैसे अपेक्षाकृत कुछ प्रतीकों पर असंबंधित अवधारणाओं की एक विस्तृत श्रृंखला को मैप करने का प्रयास करें।
स्काला विधि नामों के रूप में मान्य गैर-शब्द प्रतीकों की एक विशाल श्रृंखला की अनुमति देता है। उदाहरण के लिए, मुझे एक एम्बेडेड Prolog-ish DSL मिला है जहाँ आप लिख सकते हैं
female('jane)! // jane is female
parent('jane,'john)! // jane is john's parent
parent('jane, 'wendy)! // jane is wendy's parent
mother('Mother, 'Child) :- parent('Mother, 'Child) & female('Mother) //'// a mother of a child is the child's parent and is female
mother('X, 'john)? // find john's mother
mother('jane, 'X)? // find's all of jane's children
: - -, ;,; और & प्रतीकों को साधारण विधियों के रूप में परिभाषित किया गया है। C ++ में केवल और यह मान्य होगा कि इस DSL को C ++ में मैप करने के प्रयास के लिए कुछ प्रतीकों की आवश्यकता होगी जो पहले से ही बहुत अलग अवधारणाओं को विकसित करते हैं।
बेशक, यह स्कैला को दूसरे प्रकार के दुरुपयोग के लिए भी खोलता है। यदि आप चाहते हैं तो Scala में आप $ $! & ^% का नाम रख सकते हैं।
अन्य भाषाओं के लिए, जैसे कि स्काला, गैर-शब्द फ़ंक्शन के उपयोग में लचीली हैं और विधि के नाम स्मॉलटाक देखते हैं, जहां, स्काला की तरह, प्रत्येक "ऑपरेटर" सिर्फ एक और विधि है और हास्केल जो प्रोग्रामर को लचीले रूप से नाम की पूर्ववर्तीता और शुद्धता को परिभाषित करने की अनुमति देता है। कार्य करता है।