Scala Language Tutorial
Iniziare con Scala Language
Ricerca…
Osservazioni
Scala è un moderno linguaggio di programmazione multi-paradigma progettato per esprimere schemi di programmazione comuni in modo conciso, elegante e sicuro per il tipo. Integra perfettamente funzionalità di linguaggi orientati agli oggetti e funzionali .
La maggior parte degli esempi forniti richiede un'installazione di Scala funzionante. Questa è la pagina di installazione di Scala , e questo è l'esempio di 'Come configurare Scala' . scalafiddle.net è una buona risorsa per l'esecuzione di piccoli esempi di codice sul web.
Versioni
Versione | Data di rilascio |
---|---|
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 |
Ciao mondo definendo un metodo "principale"
Inserisci questo codice in un file denominato HelloWorld.scala
:
object Hello {
def main(args: Array[String]): Unit = {
println("Hello World!")
}
}
Per compilarlo in bytecode eseguibile da JVM:
$ scalac HelloWorld.scala
Per eseguirlo:
$ scala Hello
Quando il runtime di Scala carica il programma, cerca un oggetto chiamato Hello
con un metodo main
. Il metodo main
è il punto di ingresso del programma ed è eseguito.
Nota che, diversamente da Java, Scala non ha bisogno di nominare oggetti o classi dopo il file in cui si trovano. Invece, il parametro Hello
passato nel comando scala Hello
riferisce all'oggetto da cercare che contiene il metodo main
da eseguire. È perfettamente possibile avere più oggetti con i metodi principali nello stesso file .scala
.
L'array args
conterrà gli argomenti della riga di comando dati al programma, se presenti. Ad esempio, possiamo modificare il programma in questo modo:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello World!")
for {
arg <- args
} println(s"Arg=$arg")
}
}
Compilalo:
$ scalac HelloWorld.scala
E poi eseguirlo:
$ scala HelloWorld 1 2 3
Hello World!
Arg=1
Arg=2
Arg=3
Ciao mondo estendendo l'app
object HelloWorld extends App {
println("Hello, world!")
}
Estendendo il tratto App
, puoi evitare di definire un metodo main
esplicito. L'intero corpo dell'oggetto HelloWorld
viene considerato come "il metodo principale".
Inizializzazione ritardata
Secondo la documentazione ufficiale , l'
App
utilizza una funzionalità denominata inizializzazione ritardata . Ciò significa che i campi dell'oggetto vengono inizializzati dopo che è stato chiamato il metodo principale.
Inizializzazione ritardata
Secondo la documentazione ufficiale , l'
App
utilizza una funzionalità denominata inizializzazione ritardata . Ciò significa che i campi dell'oggetto vengono inizializzati dopo che è stato chiamato il metodo principale.
DelayedInit
è ora deprecato per uso generale, ma è ancora supportato perApp
come caso speciale. Il supporto continuerà fino a quando non verrà decisa e implementata una funzione sostitutiva.
Per accedere agli argomenti della riga di comando durante l'estensione App
, utilizzare this.args
:
object HelloWorld extends App {
println("Hello World!")
for {
arg <- this.args
} println(s"Arg=$arg")
}
Quando si usa App
, il corpo dell'oggetto verrà eseguito come metodo main
, non è necessario sovrascrivere il main
.
Ciao mondo come una sceneggiatura
Scala può essere usato come linguaggio di scripting. Per dimostrare, crea HelloWorld.scala
con il seguente contenuto:
println("Hello")
Eseguilo con l'interprete della riga di comando ( $
è il prompt della riga di comando):
$ scala HelloWorld.scala
Hello
Se ometti .scala
(ad esempio se hai semplicemente digitato scala HelloWorld
) il runner cercherà un file .class
compilato con bytecode invece di compilare e quindi eseguire lo script.
Nota: se scala viene utilizzato come linguaggio di scripting, non è possibile definire alcun pacchetto.
Nei sistemi operativi che utilizzano bash
o terminali di shell simili, gli script Scala possono essere eseguiti utilizzando un 'preambolo di shell'. Creare un file denominato HelloWorld.sh
e inserire quanto segue come contenuto:
#!/bin/sh
exec scala "$0" "$@"
!#
println("Hello")
Le parti tra #!
e !#
è il 'preambolo della shell', ed è interpretato come uno script di bash. Il resto è Scala.
Una volta salvato il file sopra, devi concederne le autorizzazioni 'eseguibili'. Nella shell puoi fare questo:
$ chmod a+x HelloWorld.sh
(Nota che questo dà il permesso a tutti: leggi su chmod per sapere come impostarlo per gruppi di utenti più specifici.)
Ora puoi eseguire lo script in questo modo:
$ ./HelloWorld.sh
Utilizzo di Scala REPL
Quando esegui scala
in un terminale senza parametri aggiuntivi, apre un interprete 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>
Il REPL consente di eseguire Scala in un foglio di lavoro: il contesto di esecuzione viene mantenuto ed è possibile provare manualmente i comandi senza dover creare un intero programma. Ad esempio, digitando val poem = "As halcyons we shall be"
sarebbe simile a questo:
scala> val poem = "As halcyons we shall be"
poem: String = As halcyons we shall be
Ora possiamo stampare il nostro val
:
scala> print(poem)
As halcyons we shall be
Nota che val
è immutabile e non può essere sovrascritto:
scala> poem = "Brooding on the open sea"
<console>:12: error: reassignment to val
poem = "Brooding on the open sea"
Ma nel REPL è possibile ridefinire un valore val
(che causerebbe un errore in un normale programma Scala, se è stato eseguito nello stesso ambito):
scala> val poem = "Brooding on the open sea"
poem: String = Brooding on the open sea
Per il resto della sessione REPL questa variabile appena definita ombreggia la variabile definita in precedenza. REPL sono utili per vedere rapidamente come funzionano gli oggetti o altro codice. Sono disponibili tutte le funzionalità di Scala: puoi definire funzioni, classi, metodi, ecc.