खोज…


टिप्पणियों

स्काला एक आधुनिक बहु-प्रतिमान प्रोग्रामिंग भाषा है जिसे आम प्रोग्रामिंग पैटर्न को संक्षिप्त, सुरुचिपूर्ण और टाइप-सुरक्षित तरीके से व्यक्त करने के लिए डिज़ाइन किया गया है। यह वस्तु-उन्मुख और कार्यात्मक भाषाओं की सुविधाओं को सुचारू रूप से एकीकृत करता है।

अधिकांश दिए गए उदाहरणों में काम करने वाले स्काला इंस्टॉलेशन की आवश्यकता होती है। यह स्काला इंस्टॉलेशन पेज है , और यह 'हाउ टू सेटअप स्काला' उदाहरण है। 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 ऑब्जेक्ट के पूरे शरीर को "मुख्य विधि" के रूप में माना जाता है।

2.11.0

विलंबित प्रारंभ

आधिकारिक दस्तावेज के अनुसार , App डिलीट इनिशियलाइज़ेशन नामक सुविधा का उपयोग करता है। इसका अर्थ यह है कि मुख्य विधि कहे जाने के बाद ऑब्जेक्ट फ़ील्ड को प्रारंभ किया जाता है।

2.11.0

विलंबित प्रारंभ

आधिकारिक दस्तावेज के अनुसार , 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 यह देखने के लिए उपयोगी हैं कि ऑब्जेक्ट या अन्य कोड कैसे काम करते हैं। स्काला की सभी सुविधाएँ उपलब्ध हैं: आप कार्यों, कक्षाओं, विधियों आदि को परिभाषित कर सकते हैं।

स्काला क्विकशीट

विवरण कोड
अपरिवर्तनीय int मान असाइन करें val x = 3
पारस्परिक अंतर मूल्य निर्दिष्ट करें var x = 3
स्पष्ट प्रकार के साथ अपरिवर्तनीय मूल्य निर्दिष्ट करें val x: Int = 27
आलसी मूल्यांकन मूल्य निर्धारित करें lazy val y = print("Sleeping in.")
एक फ़ंक्शन को एक नाम से बांधें val f = (x: Int) => x * x
एक फ़ंक्शन को स्पष्ट प्रकार के साथ एक नाम से बांधें val f: Int => Int = (x: Int) => x * x
एक विधि परिभाषित करें def f(x: Int) = x * x
स्पष्ट टाइपिंग के साथ एक विधि को परिभाषित करें def f(x: Int): Int = x * x
एक वर्ग को परिभाषित करें class Hopper(someParam: Int) { ... }
किसी वस्तु को परिभाषित करना object Hopper(someParam: Int) { ... }
एक लक्षण परिभाषित करें trait Grace { ... }
अनुक्रम का पहला तत्व प्राप्त करें Seq(1,2,3).head
अगर स्विच val result = if(x > 0) "Positive!"
पहले सिवाय अनुक्रम के सभी तत्वों को प्राप्त करें Seq(1,2,3).tail
एक सूची के माध्यम से लूप for { x <- Seq(1,2,3) } print(x)
नेस्टेड लूपिंग for {
x <- Seq(1,2,3)
y <- Seq(4,5,6)
} print(x + ":" + y)
प्रत्येक सूची तत्व के लिए फ़ंक्शन निष्पादित करें List(1,2,3).foreach { println }
मानक के लिए प्रिंट करें print("Ada Lovelace")
एक सूची को अल्फ़ान्यूमेरिक रूप से क्रमबद्ध करें List('b','c','a').sorted


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow