Szukaj…


Uwagi

Scala jest nowoczesnym językiem programowania opartym na wielu paradygmatach, zaprojektowanym do wyrażania typowych wzorców programowania w zwięzły, elegancki i bezpieczny sposób. Płynnie integruje funkcje języków obiektowych i funkcjonalnych .

Większość podanych przykładów wymaga działającej instalacji Scali. To jest strona instalacji Scali , a jest to przykład „Jak skonfigurować Scalę” . scalafiddle.net jest dobrym źródłem do wykonywania małych przykładów kodu w Internecie.

Wersje

Wersja Data wydania
2.10.1 2013-03-13
2.10.2 2013-06-06
2.10.3 01.10.2013
2.10.4 24.03.2014
2.10.5 2015-03-05
2.10.6 2015-09-18
2.11.0 21.04.2014
2.11.1 21.05.2014
2.11.2 2014-07-24
2.11.4 30.10.2014
2.11.5 14.01.2014
2.11.6 2015-03-05
2.11.7 2015-06-23
2.11.8 08.03.2016
2.11.11 19.04.2017
2.12.0 2016-11-03
2.12.1 06.12.2016
2.12.2 19.04.2017

Hello World, definiując „główną” metodę

Umieść ten kod w pliku o nazwie HelloWorld.scala :

object Hello {
  def main(args: Array[String]): Unit = {
    println("Hello World!")
  }
}

Demo na żywo

Aby skompilować go do kodu bajtowego, który jest wykonywalny przez JVM:

$ scalac HelloWorld.scala

Aby uruchomić:

$ scala Hello

Gdy środowisko wykonawcze Scala ładuje program, szuka obiektu o nazwie Hello za pomocą main metody. main metodą jest punkt wejścia programu i jest ona wykonywana.

Zauważ, że w przeciwieństwie do Javy, Scala nie wymaga nazywania obiektów ani klas po pliku, w którym się znajdują. Zamiast tego parametr Hello przekazany w poleceniu scala Hello odnosi się do scala Hello obiektu, który zawiera main metodę do wykonania. Zupełnie możliwe jest posiadanie wielu obiektów za pomocą głównych metod w tym samym pliku .scala .

Tablica args będzie zawierać argumenty wiersza poleceń podane programowi, jeśli takie istnieją. Na przykład możemy zmodyfikować program w następujący sposób:

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello World!")
    for {
      arg <- args
    } println(s"Arg=$arg")
  }
}

Skompiluj to:

$ scalac HelloWorld.scala

A następnie wykonaj to:

$ scala HelloWorld 1 2 3
Hello World!
Arg=1
Arg=2
Arg=3

Hello World, rozszerzając aplikację

object HelloWorld extends App {
  println("Hello, world!")
}

Demo na żywo

Rozszerzając cechę App , można uniknąć zdefiniowania wyraźnej metody main . Całe ciało obiektu HelloWorld jest traktowane jako „metoda główna”.

2.11.0

Opóźniona inicjalizacja

Zgodnie z oficjalną dokumentacją App korzysta z funkcji zwanej opóźnioną inicjalizacją . Oznacza to, że pola obiektowe są inicjowane po wywołaniu metody głównej.

2.11.0

Opóźniona inicjalizacja

Zgodnie z oficjalną dokumentacją App korzysta z funkcji zwanej opóźnioną inicjalizacją . Oznacza to, że pola obiektowe są inicjowane po wywołaniu metody głównej.

DelayedInit jest teraz przestarzałe do użytku ogólnego, ale nadal jest obsługiwane dla App jako szczególny przypadek. Wsparcie będzie kontynuowane do momentu decyzji i wdrożenia funkcji zastępczej.

Aby uzyskać dostęp do argumentów wiersza polecenia podczas rozszerzania App , użyj this.args :

object HelloWorld extends App {
  println("Hello World!")
  for {
    arg <- this.args
  } println(s"Arg=$arg")
}

Podczas korzystania z App ciało obiektu zostanie wykonane jako metoda main , nie ma potrzeby zastępowania main .

Hello World jako skrypt

Scala może być używana jako język skryptowy. Aby to zademonstrować, utwórz HelloWorld.scala o następującej treści:

println("Hello")

Wykonaj go za pomocą interpretera wiersza poleceń ( $ to wiersz polecenia):

$ scala HelloWorld.scala
Hello

Jeśli pominiesz .scala (na przykład jeśli po prostu wpisałeś scala HelloWorld ), biegacz będzie szukał skompilowanego pliku .class z kodem bajtowym zamiast kompilować, a następnie uruchamiać skrypt.

Uwaga: Jeśli scala jest używany jako język skryptowy, nie można zdefiniować pakietu.

W systemach operacyjnych wykorzystujących bash lub podobne terminale powłoki, skrypty Scala mogą być wykonywane przy użyciu „preambuły powłoki”. Utwórz plik o nazwie HelloWorld.sh i umieść następujące elementy jako jego zawartość:

#!/bin/sh
exec scala "$0" "$@"
!#
println("Hello")

Części między #! a !# to „preambuła powłoki”, która jest interpretowana jako skrypt bash. Reszta to Scala.

Po zapisaniu powyższego pliku musisz udzielić mu uprawnień „wykonywalnych”. W powłoce możesz to zrobić:

$ chmod a+x HelloWorld.sh

(Pamiętaj, że daje to wszystkim uprawnienia: przeczytaj o chmod, aby dowiedzieć się, jak ustawić go dla bardziej określonych zestawów użytkowników).

Teraz możesz wykonać skrypt w następujący sposób:

$ ./HelloWorld.sh

Korzystanie ze Scala REPL

Kiedy wykonujesz scala w terminalu bez dodatkowych parametrów, otwiera się interpreter REPL (Read-Eval-Print Loop):

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> 

REPL pozwala na wykonywanie Scali w stylu arkusza roboczego: kontekst wykonania zostaje zachowany i można ręcznie wypróbować polecenia bez konieczności budowania całego programu. Na przykład, wpisując val poem = "As halcyons we shall be" wyglądałoby to tak:

scala> val poem = "As halcyons we shall be"
poem: String = As halcyons we shall be

Teraz możemy wydrukować naszą val :

scala> print(poem)
As halcyons we shall be

Zauważ, że val jest niezmienny i nie można go zastąpić:

scala> poem = "Brooding on the open sea"
<console>:12: error: reassignment to val
       poem = "Brooding on the open sea"

Ale w REPL można przedefiniować do val (co mogłoby spowodować błąd w normalnym programie Scala, jeśli to było robione w tym samym zakresie):

scala> val poem = "Brooding on the open sea"
poem: String = Brooding on the open sea

Przez resztę sesji REPL ta nowo zdefiniowana zmienna będzie przesłaniać poprzednio zdefiniowaną zmienną. REPL są przydatne do szybkiego zobaczenia, jak działają obiekty lub inny kod. Wszystkie funkcje Scali są dostępne: możesz zdefiniować funkcje, klasy, metody itp.

Scala Quicksheet

Opis Kod
Przypisz niezmienną wartość int val x = 3
Przypisz zmienną wartość int var x = 3
Przypisz niezmienną wartość jawnym typem val x: Int = 27
Przypisz leniwie oszacowaną wartość lazy val y = print("Sleeping in.")
Powiąż funkcję z nazwą val f = (x: Int) => x * x
Powiąż funkcję z nazwą o wyraźnym typie val f: Int => Int = (x: Int) => x * x
Zdefiniuj metodę def f(x: Int) = x * x
Zdefiniuj metodę z wyraźnym pisaniem def f(x: Int): Int = x * x
Zdefiniuj klasę class Hopper(someParam: Int) { ... }
Zdefiniuj obiekt object Hopper(someParam: Int) { ... }
Zdefiniuj cechę trait Grace { ... }
Uzyskaj pierwszy element sekwencji Seq(1,2,3).head
Jeśli zmień val result = if(x > 0) "Positive!"
Zdobądź wszystkie elementy sekwencji oprócz pierwszego Seq(1,2,3).tail
Pętlę przez listę for { x <- Seq(1,2,3) } print(x)
Zagnieżdżone zapętlenie for {
x <- Seq(1,2,3)
y <- Seq(4,5,6)
} print(x + ":" + y)
Dla każdego elementu listy wykonaj funkcję List(1,2,3).foreach { println }
Drukuj na standardowe wyjście print("Ada Lovelace")
Sortuj listę alfanumerycznie List('b','c','a').sorted


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow