Scala Language ट्यूटोरियल
शुरुआत स्काला लैंग्वेज से हो रही है
खोज…
टिप्पणियों
स्काला एक आधुनिक बहु-प्रतिमान प्रोग्रामिंग भाषा है जिसे आम प्रोग्रामिंग पैटर्न को संक्षिप्त, सुरुचिपूर्ण और टाइप-सुरक्षित तरीके से व्यक्त करने के लिए डिज़ाइन किया गया है। यह वस्तु-उन्मुख और कार्यात्मक भाषाओं की सुविधाओं को सुचारू रूप से एकीकृत करता है।
अधिकांश दिए गए उदाहरणों में काम करने वाले स्काला इंस्टॉलेशन की आवश्यकता होती है। यह स्काला इंस्टॉलेशन पेज है , और यह 'हाउ टू सेटअप स्काला' उदाहरण है। scalafiddle.net वेब पर छोटे कोड उदाहरण निष्पादित करने के लिए एक अच्छा संसाधन है।
संस्करण
संस्करण | रिलीज़ की तारीख |
---|---|
2.10.1 | 2013-03-13 |
2.10.2 | 2013-06-06 |
2.10.3 | 2013-10-01 |
2.10.4 | 2014-03-24 |
2.10.5 | 2015-03-05 |
2.10.6 | 2015/09/18 |
2.11.0 | 2014-04-21 |
2.11.1 | 2014-05-21 |
2.11.2 | 2014-07-24 |
2.11.4 | 2014-10-30 |
2.11.5 | 2014-01-14 |
2.11.6 | 2015-03-05 |
2.11.7 | 2015/06/23 |
2.11.8 | 2016/03/08 |
2.11.11 | 2017/04/19 |
2.12.0 | 2016/11/03 |
2.12.1 | 2016/12/06 |
2.12.2 | 2017/04/19 |
एक 'मुख्य' विधि को परिभाषित करके हैलो वर्ल्ड
इस कोड को HelloWorld.scala
नामक फ़ाइल में रखें:
object Hello {
def main(args: Array[String]): Unit = {
println("Hello World!")
}
}
JVM द्वारा निष्पादित होने वाले bytecode को संकलित करने के लिए:
$ scalac HelloWorld.scala
इसे चलाने के लिए:
$ scala Hello
जब स्काला रनटाइम प्रोग्राम को लोड करता है, तो यह एक main
विधि के साथ Hello
नामक ऑब्जेक्ट की तलाश करता है। main
विधि प्रोग्राम एंट्री पॉइंट है और इसे निष्पादित किया जाता है।
ध्यान दें कि, जावा के विपरीत, स्काला को फ़ाइल में आने के बाद ऑब्जेक्ट्स या कक्षाओं के नामकरण की कोई आवश्यकता नहीं है। इसके बजाय, कमांड Hello
पारित scala Hello
ऑब्जेक्ट को देखने के लिए संदर्भित करता है जिसमें main
विधि निष्पादित होती है। एक ही .scala
फ़ाइल में मुख्य विधियों के साथ कई ऑब्जेक्ट होना पूरी तरह से संभव है।
args
सरणी में प्रोग्राम को दिए गए कमांड-लाइन तर्क होंगे, यदि कोई हो। उदाहरण के लिए, हम इस तरह से कार्यक्रम को संशोधित कर सकते हैं:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello World!")
for {
arg <- args
} println(s"Arg=$arg")
}
}
इसे संकलित करें:
$ scalac HelloWorld.scala
और फिर इसे निष्पादित करें:
$ scala HelloWorld 1 2 3
Hello World!
Arg=1
Arg=2
Arg=3
हैलो वर्ल्ड ऐप का विस्तार करके
object HelloWorld extends App {
println("Hello, world!")
}
App
विशेषता का विस्तार करके, आप एक स्पष्ट main
विधि को परिभाषित करने से बच सकते हैं। HelloWorld
ऑब्जेक्ट के पूरे शरीर को "मुख्य विधि" के रूप में माना जाता है।
विलंबित प्रारंभ
आधिकारिक दस्तावेज के अनुसार ,
App
डिलीट इनिशियलाइज़ेशन नामक सुविधा का उपयोग करता है। इसका अर्थ यह है कि मुख्य विधि कहे जाने के बाद ऑब्जेक्ट फ़ील्ड को प्रारंभ किया जाता है।
विलंबित प्रारंभ
आधिकारिक दस्तावेज के अनुसार ,
App
डिलीट इनिशियलाइज़ेशन नामक सुविधा का उपयोग करता है। इसका अर्थ यह है कि मुख्य विधि कहे जाने के बाद ऑब्जेक्ट फ़ील्ड को प्रारंभ किया जाता है।
DelayedInit
अब सामान्य उपयोग के लिए पदावनत कर दिया गया है , लेकिन अभी भी एक विशेष मामले के रूप मेंApp
लिए समर्थित है । समर्थन तब तक जारी रहेगा जब तक कि एक प्रतिस्थापन सुविधा का फैसला नहीं किया जाता और लागू नहीं किया जाता।
जब विस्तार पहुँच कमांड लाइन तर्क करने के लिए App
, उपयोग this.args
:
object HelloWorld extends App {
println("Hello World!")
for {
arg <- this.args
} println(s"Arg=$arg")
}
का उपयोग करते समय App
, वस्तु के शरीर के रूप में क्रियान्वित की जाएगी main
विधि, ओवरराइड करने के लिए कोई जरूरत नहीं है main
।
एक स्क्रिप्ट के रूप में हैलो वर्ल्ड
स्कैला का इस्तेमाल स्क्रिप्टिंग भाषा के रूप में किया जा सकता है। प्रदर्शित करने के लिए, निम्न सामग्री के साथ HelloWorld.scala
बनाएं:
println("Hello")
कमांड-लाइन दुभाषिया के साथ इसे निष्पादित करें ( $
कमांड लाइन प्रॉम्प्ट है):
$ scala HelloWorld.scala
Hello
यदि आप .scala
छोड़ .scala
(जैसे कि यदि आप बस टाइप करें scala HelloWorld
) तो रनर संकलन के बजाय संकलित .class
फ़ाइल को संकलित करने और फिर स्क्रिप्ट निष्पादित करने के लिए देखेगा।
नोट: यदि स्कैलिंग को स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है, तो कोई भी पैकेज परिभाषित नहीं किया जा सकता है।
bash
या इसी तरह के शेल टर्मिनलों का उपयोग करने वाले ऑपरेटिंग सिस्टम में, स्काला लिपियों को 'शेल प्रस्तावना' का उपयोग करके निष्पादित किया जा सकता है। HelloWorld.sh
नाम की एक फ़ाइल बनाएँ और उसकी सामग्री के रूप में निम्न जगह दें:
#!/bin/sh
exec scala "$0" "$@"
!#
println("Hello")
#!
बीच के हिस्से #!
और !#
'शेल प्रैम्बल' है, और इसे बैश स्क्रिप्ट के रूप में व्याख्यायित किया जाता है। बाकी स्काला है।
एक बार जब आपने उपरोक्त फ़ाइल को सहेज लिया है, तो आपको इसे 'निष्पादन योग्य' अनुमति देनी होगी। शेल में आप यह कर सकते हैं:
$ chmod a+x HelloWorld.sh
(ध्यान दें कि यह सभी को अनुमति देता है: उपयोगकर्ताओं के अधिक विशिष्ट सेटों के लिए इसे सेट करने के तरीके के बारे में जानने के लिए chmod के बारे में पढ़ें ।)
अब आप इस तरह से स्क्रिप्ट निष्पादित कर सकते हैं:
$ ./HelloWorld.sh
स्काला आरईपीएल का उपयोग करना
जब आप अतिरिक्त मापदंडों के बिना एक टर्मिनल में scala
निष्पादित करते हैं तो यह एक REPL (रीड-एवल-प्रिंट लूप) दुभाषिया को खोलता है:
nford:~ $ scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
Type in expressions for evaluation. Or try :help.
scala>
आरईपीएल आपको एक कार्यपत्रक शैली में स्काला को निष्पादित करने की अनुमति देता है: निष्पादन संदर्भ संरक्षित है और आप पूरे कार्यक्रम का निर्माण किए बिना आदेशों को मैन्युअल रूप से आज़मा सकते हैं। उदाहरण के लिए, val poem = "As halcyons we shall be"
लिखकर val poem = "As halcyons we shall be"
इस तरह दिखेंगे:
scala> val poem = "As halcyons we shall be"
poem: String = As halcyons we shall be
अब हम अपनी val
छाप सकते हैं:
scala> print(poem)
As halcyons we shall be
ध्यान दें कि val
अपरिवर्तनीय है और ओवरराइट नहीं किया जा सकता है:
scala> poem = "Brooding on the open sea"
<console>:12: error: reassignment to val
poem = "Brooding on the open sea"
लेकिन आरईपीएल में आप एक val
को फिर से परिभाषित कर सकते हैं (जो एक सामान्य स्काला कार्यक्रम में त्रुटि का कारण होगा, अगर यह उसी दायरे में किया गया था):
scala> val poem = "Brooding on the open sea"
poem: String = Brooding on the open sea
आपके REPL सत्र के शेष के लिए यह नया परिभाषित चर पहले से परिभाषित चर को छाया देगा। REPLs यह देखने के लिए उपयोगी हैं कि ऑब्जेक्ट या अन्य कोड कैसे काम करते हैं। स्काला की सभी सुविधाएँ उपलब्ध हैं: आप कार्यों, कक्षाओं, विधियों आदि को परिभाषित कर सकते हैं।