स्काला एक उच्च-स्तरीय प्रोग्रामिंग भाषा है जो कार्यात्मक और वस्तु-उन्मुख प्रोग्रामिंग पैराजाइम को मिलाती है। इसे जावा की कमियों को दूर करने के लिए विकसित किया गया था, जो संक्षिप्त सिंटैक्स, शक्तिशाली अमूर्तताएँ, और आधुनिक सॉफ़्टवेयर विकास के लिए उपयुक्त विशेषताओं का एक समृद्ध सेट प्रदान करता है। स्काला जावा वर्चुअल मशीन (JVM) पर चलती है और जावा के साथ इंटरऑपरेट कर सकती है, जिससे डेवलपर्स को मौजूदा जावा पुस्तकालयों का उपयोग करने की अनुमति मिलती है जबकि स्काला के अभिव्यक्तिपूर्ण सिंटैक्स और उन्नत सुविधाओं के लाभ का आनंद लेते हैं।
स्काला का निर्माण मार्टिन ओडर्स्की ने स्विट्ज़रलैंड के EPFL (École polytechnique fédérale de Lausanne) में किया था। इसका डिज़ाइन एक ऐसी भाषा की आवश्यकता से प्रभावित था जो वस्तु-उन्मुख और कार्यात्मक प्रोग्रामिंग के सर्वोत्तम पहलुओं को मिलाती हो, जिसके परिणामस्वरूप इसका विमोचन 2003 में हुआ। "स्काला" नाम "स्केलेबल भाषा" के लिए खड़ा है, जो इसके विकास की क्षमता को दर्शाता है।
स्काला ने विशेष रूप से 2009 में प्ले फ्रेमवर्क के परिचय के बाद लोकप्रियता हासिल की, जो स्काला का उपयोग करके अनुप्रयोगों के विकास को सरल बनाता है। अपाचे स्पार्क का परिचय, जो स्काला में लिखा गया एक बड़ा डेटा प्रोसेसिंग फ्रेमवर्क है, ने सॉफ़्टवेयर उद्योग में इसकी प्रमुखता को और बढ़ाया। वर्षों के दौरान, स्काला ने काफी विकास किया है, अन्य प्रोग्रामिंग भाषाओं से सुविधाओं को एकीकृत किया है और इसके चारों ओर एक जीवंत समुदाय को बढ़ावा दिया है।
हाल के वर्षों में, स्काला ने अनुकूलन जारी रखा है, जिसमें मई 2021 में स्काला 3 (जिसे डॉट्टी भी कहा जाता है) का विमोचन शामिल है, जिसमें एक नए प्रकार की प्रणाली और बेहतर मेटाप्रोग्रामिंग क्षमताओं जैसी महत्वपूर्ण भाषा सुधार शामिल हैं। स्काला पारिस्थितिकी तंत्र अब विभिन्न क्षेत्रों में इसकी उपयोगिता को बढ़ाने वाले पुस्तकालयों और फ्रेमवर्क की एक विस्तृत श्रृंखला को समाहित करता है, जिसमें डेटा विश्लेषण, वेब विकास, और माइक्रोसर्विसेज शामिल हैं।
स्काला में एक मजबूत स्थैतिक प्रकार प्रणाली है, जो त्रुटियों का जल्दी पता लगाने की अनुमति देती है और प्रकार अनुमान प्रदान करती है जो बायलरप्लेट कोड को कम करने में मदद करती है। उदाहरण के लिए:
val greeting: String = "Hello, Scala!"
स्काला में फ़ंक्शन प्रथम श्रेणी के नागरिक होते हैं, जो कार्यात्मक प्रोग्रामिंग को सक्षम बनाते हैं। आप फ़ंक्शनों को पैरामीटर के रूप में पास कर सकते हैं या उन्हें अन्य फ़ंक्शनों से वापस कर सकते हैं:
def add(x: Int, y: Int): Int = x + y
val sum = (a: Int, b: Int) => add(a, b)
स्काला में केस क्लासेस एक संक्षिप्त तरीके से अपरिवर्तनीय डेटा संरचनाएँ बनाने और equals()
और hashCode()
जैसी विधियों को स्वचालित रूप से लागू करने की सुविधा प्रदान करती हैं:
case class Person(name: String, age: Int)
val p = Person("Alice", 30)
स्काला शक्तिशाली पैटर्न मिलान का समर्थन करता है, जो डेटा संरचनाओं को विघटित करने और नियंत्रण प्रवाह को सरल बनाने की अनुमति देता है:
def describe(x: Any): String = x match {
case 0 => "zero"
case _: Int => "integer"
case _: String => "string"
case _ => "unknown"
}
स्काला में ट्रेट्स जावा में इंटरफेस के समान होते हैं लेकिन इनमें विधि कार्यान्वयन शामिल हो सकते हैं। ये कई विरासत को सक्षम बनाते हैं:
trait Greeter {
def greet(): Unit = println("Hello!")
}
class EnglishGreeter extends Greeter
स्काला में Option
प्रकार के लिए अंतर्निहित समर्थन है, जो एक मान का प्रतिनिधित्व करता है जो मौजूद हो सकता है या नहीं, जिससे नल पॉइंटर अपवादों से बचने में मदद मिलती है:
def findPerson(name: String): Option[Person] = ...
स्काला एक समृद्ध संग्रह पुस्तकालय प्रदान करता है जिसमें परिवर्तनीय और अपरिवर्तनीय संग्रह शामिल हैं, जिससे डेटा हेरफेर सरल हो जाता है:
val numbers = List(1, 2, 3, 4)
val doubled = numbers.map(_ * 2)
इम्प्लिसिट्स फ़ंक्शन कॉलिंग में बेहतर लचीलापन प्रदान करते हैं, जब आवश्यक हो तो स्वचालित रूप से पैरामीटर प्रदान करते हैं:
implicit val defaultGreeting: String = "Hello!"
def greet(implicit greeting: String) = println(greeting)
स्काला में फॉर कॉम्प्रिहेंशन्स संग्रहों और मोनैड्स, जैसे Option
, के साथ काम करना सरल बनाते हैं, जिससे संचालन को श्रृंखलाबद्ध करने के लिए सुरुचिपूर्ण सिंटैक्स सक्षम होता है:
for {
x <- Option(1)
y <- Option(2)
} yield x + y
SBT (सिंपल बिल्ड टूल) स्काला के लिए डि फैक्टो बिल्ड टूल है, जो परियोजना प्रबंधन, निर्भरता समाधान, और परीक्षण चलाने की अनुमति देता है:
name := "MyScalaProject"
version := "0.1"
scalaVersion := "2.13.6"
libraryDependencies += "org.scala-lang" % "scala-library" % "2.13.6"
स्काला JVM पर चलती है, जिसका अर्थ है कि यह व्यापक जावा पारिस्थितिकी तंत्र का लाभ उठा सकती है और किसी भी प्लेटफ़ॉर्म पर होस्ट की जा सकती है जो जावा का समर्थन करता है।
स्काला विकास के लिए सामान्य IDEs में IntelliJ IDEA (स्काला प्लगइन के साथ) और Eclipse के साथ स्काला IDE प्लगइन शामिल हैं। दोनों IDEs कोड पूर्णता, डिबगिंग, और एकीकृत SBT समर्थन जैसी सुविधाएँ प्रदान करते हैं, जिससे विकास अनुभव को बढ़ाया जा सके।
स्काला का अपना कंपाइलर है, जो स्काला और जावा कोड दोनों को संकलित कर सकता है। स्काला परियोजना बनाने के लिए सामान्य दृष्टिकोण SBT का उपयोग करना है, जो वृद्धिशील संकलन और निर्भरता प्रबंधन की अनुमति देता है। यहाँ एक परियोजना बनाने का तरीका है:
build.sbt
नामक एक फ़ाइल बनाएं।build.sbt
में अपनी परियोजना सेटिंग्स को परिभाषित करें।src/main/scala
निर्देशिका में अपना स्काला कोड लिखें।स्काला का उपयोग विभिन्न अनुप्रयोगों के निर्माण के लिए व्यापक रूप से किया जाता है, जिसमें वेब अनुप्रयोग, डेटा प्रोसेसिंग फ्रेमवर्क (जैसे अपाचे स्पार्क), और वितरित सिस्टम शामिल हैं। कार्यात्मक और वस्तु-उन्मुख विशेषताओं का मिश्रण इसे उन परियोजनाओं के लिए विशेष रूप से उपयुक्त बनाता है जो समवर्ती और स्केलेबल समाधानों की आवश्यकता होती है, जैसे माइक्रोसर्विस आर्किटेक्चर।
स्काला को विशिष्ट विशेषताओं और पैराजाइम के आधार पर विभिन्न भाषाओं के साथ तुलना की जा सकती है:
स्काला कार्यात्मक प्रोग्रामिंग के सिद्धांतों को एकीकृत करता है जो जावा में मौजूद नहीं हैं, जैसे प्रथम श्रेणी के फ़ंक्शन, पैटर्न मिलान, और केस क्लासेस। इसके अतिरिक्त, स्काला का संक्षिप्त सिंटैक्स अक्सर जावा की तुलना में कम कोड की पंक्तियों की ओर ले जाता है।
पायथन की गतिशील टाइपिंग स्काला की स्थैतिक टाइपिंग के विपरीत है, जिससे त्रुटि-हैंडलिंग रणनीतियों में भिन्नता आती है। JVM पर स्काला के प्रदर्शन लाभ अक्सर पायथन की त्वरित स्क्रिप्टिंग पर उपयोग में आसानी से अधिक होते हैं।
कोटलिन, स्काला की तरह, JVM पर चलता है और जावा में सुधार के लिए डिज़ाइन किया गया है। कोटलिन जावा के साथ इंटरऑपरेबिलिटी और एक अधिक सुव्यवस्थित सिंटैक्स पर अधिक ध्यान केंद्रित करता है, जबकि स्काला एक अधिक व्यापक कार्यात्मक दृष्टिकोण अपनाता है।
स्काला और गो दोनों समवर्तीता का समर्थन करते हैं लेकिन विभिन्न तरीकों से। गो गोरूटीन और चैनलों का उपयोग करता है, जबकि स्काला लाइब्रेरी जैसे अक्का के माध्यम से अभिनेता मॉडल का लाभ उठाता है। स्काला की बहु-पैराजाइम प्रकृति प्रोग्रामिंग शैलियों के संदर्भ में अधिक लचीलापन प्रदान करती है।
जब स्काला कोड को अन्य भाषाओं में अनुवादित करते समय, एक को लक्षित भाषा में समकक्ष निर्माण की पहचान करने पर ध्यान केंद्रित करना चाहिए। उदाहरण के लिए, विचार करें कि स्काला का Option
प्रकार कोटलिन या टाइपस्क्रिप्ट जैसी भाषाओं में नल योग्य प्रकारों में कैसे अनुवादित होता है।
कई उपकरण और पुस्तकालय विकसित किए गए हैं जो स्रोत से स्रोत अनुवाद को सुविधाजनक बनाते हैं, जैसे: