scalatutorial.de

Stufe 1Einstieg · Lektion 4 von 34

Der Scala-Interpreter und Scala-Skripte

Aktualisiert am 24. September 20263 Min. LesezeitSchritt 4/5 dieser Stufe

Die REPL ist die interaktive Konsole von Scala: Sie tippen einen Ausdruck ein und sehen sofort Ergebnis und Typ. Zusammen mit Skriptdateien ist sie das schnellste Werkzeug, um Scala kennenzulernen und kleine Aufgaben zu erledigen.

REPL heißt Read, Eval, Print, Loop

Der Kreislauf der Scala-REPL: Read, Eval, Print, LoopReadEvalPrintLoopscala> 6 * 7val res0: Int = 42Eingabe lesen, auswerten,Ergebnis samt Typ zeigen,auf nächste Eingabe warten.
Die REPL liest, wertet aus, gibt aus – und wartet auf die nächste Eingabe.

Streng genommen ist die REPL kein Interpreter: Jede Eingabe wird im Hintergrund kompiliert und dann ausgeführt. Für Sie fühlt es sich trotzdem an wie ein Interpreter. Gestartet wird sie mit dem Befehl scala ohne weitere Argumente:

 REPL
scala> 6 * 7
val res0: Int = 42

scala> val name = "Scala"
val name: String = Scala

scala> name.toUpperCase.reverse
val res1: String = ALACS

Ergebnisse ohne eigenen Namen landen in automatisch benannten Werten res0, res1 und so weiter, die Sie weiterverwenden können: res0 + 1 ergibt 43.

Mehrzeilige Eingaben

Endet eine Zeile so, dass der Ausdruck offensichtlich weitergeht, wartet die REPL auf die nächste Zeile. Das gilt zum Beispiel nach einem = oder einer offenen Klammer:

 REPL
scala> def quadrat(x: Int): Int =
     |   x * x
def quadrat(x: Int): Int

scala> quadrat(12)
val res2: Int = 144

Nützliche Befehle

Befehle der REPL beginnen mit einem Doppelpunkt. Die wichtigsten:

BefehlWirkung
:type ausdruckzeigt nur den Typ, ohne den Ausdruck auszuwerten
:doc namezeigt die Dokumentation, soweit vorhanden
:importslistet die aktiven Importe
:load datei.scalaliest eine Datei ein, als wäre sie getippt worden
:resetvergisst alle bisherigen Definitionen
:helpÜbersicht aller Befehle
:quitbeendet die REPL (auch Strg+D)

Mit der Tabulatortaste vervollständigt die REPL Namen: Tippen Sie "text".to und drücken Sie Tab, erscheinen alle Methoden, die mit to beginnen.

Bibliotheken in der REPL

Der scala-Befehl kann Abhängigkeiten direkt laden. So starten Sie eine REPL mit einer JSON-Bibliothek:

 Terminal
$ scala repl --dep com.lihaoyi::upickle:4.1.0

Die Schreibweise gruppe::name:version mit zwei Doppelpunkten bedeutet: „die zur Scala-Version passende Variante der Bibliothek“. Die Versionsnummer übernehmen Sie am besten aus der Dokumentation der Bibliothek.

Scala-Skripte

Für kleine Automatisierungen braucht es kein Projekt. Eine Datei mit der Endung .sc ist ein Skript: Die Anweisungen darin werden von oben nach unten ausgeführt, ohne @main.

dateien.scScala 3
//> using scala 3.9.0

val ordner = os.pwd
val scalaDateien = os.list(ordner).filter(_.ext == "scala")
println(s"${scalaDateien.size} Scala-Dateien in $ordner")
scalaDateien.foreach(p => println(" - " + p.last))

Moment – woher kommt os? Das ist die Bibliothek os-lib, die Sie mit einer weiteren Direktive einbinden:

dateien.scScala 3
//> using scala 3.9.0
//> using dep com.lihaoyi::os-lib:0.11.4

Zeilen, die mit //> using beginnen, sind Direktiven für Scala CLI. Für den Compiler sind es Kommentare; das Werkzeug liest daraus Scala-Version, Abhängigkeiten und Compiler-Optionen. Gestartet wird das Skript wie jede andere Datei mit scala run dateien.sc.

Worksheets im Editor

Metals (VS Code) und IntelliJ bieten zusätzlich Worksheets: Dateien mit der Endung .worksheet.sc, bei denen das Ergebnis jeder Zeile direkt daneben erscheint, sobald Sie speichern. Das ist die komfortabelste Art, Beispiele aus diesem Lehrgang durchzuspielen.

Passt dazu