Kurz: Scala (Martin Odersky, EPFL, 2004) verbindet objektorientierte und funktionale Programmierung auf der JVM (Java Virtual Machine), läuft aber auch als JavaScript (Scala.js) und nativ (Scala Native).
Teil des Kurses Scala
Was ist Scala?
Scala (Martin Odersky, EPFL, 2004) verbindet objektorientierte und funktionale Programmierung auf der JVM (Java Virtual Machine), läuft aber auch als JavaScript (Scala.js) und nativ (Scala Native). Der Name steht für scalable language: Sie wächst mit deinen Anforderungen von kleinen Skripten bis zu riesigen verteilten Systemen. Scala 3 (2021) hat eine aufgeräumte Syntax und stärkere Typen.
Bekannte Einsatzgebiete: Apache Spark (Big Data), Akka/Pekko (verteilte Systeme), Kafka, Backend-Dienste (Play, http4s, ZIO, Cats Effect). Twitter/X, LinkedIn und Netflix setzten stark auf Scala. Java-Bibliotheken lassen sich direkt nutzen.
Werkzeuge
- scala-cli: das komfortabelste Werkzeug (
scala-cli run Hallo.scala) - sbt (Build-Werkzeug), Mill
- IDEs: IntelliJ IDEA (Scala-Plugin), VS Code mit Metals
- Scastie (scastie.scala-lang.org): Scala im Browser
scala-cli run Hallo.scala
scala-cli test .
scala-cli repl # interaktive Konsole
scalac -d out Hallo.scala && scala -cp out hallo # klassischDas erste Programm
Hallo.scala
@main def main(): Unit =
println("Hallo Scala!")
val name = "Mia"
println(s"Hallo, $name!") // s-Interpolation
println(s"2 + 3 = ${2 + 3}")
println(f"Pi ist ungefähr ${math.Pi}%.3f") // f-Interpolation mit Format
print("ohne Zeilenumbruch")
println()Ausgabe:
Hallo Scala!
Hallo, Mia!
2 + 3 = 5
Pi ist ungefähr 3.142
ohne Zeilenumbruch@main defkennzeichnet den Einstiegspunkt (Scala 3)- Einrückung gliedert Blöcke (wie Python); geschweifte Klammern sind optional
s"..."setzt Werte ein,f"..."formatiert,raw"..."lässt\unverändert- Anweisungen brauchen kein Semikolon
- Kommentare:
// ...,/* ... */, Dokumentation/** ... */
val und var
@main def main(): Unit =
val konstante = 42 // unveränderlich (bevorzugen!)
var zaehler = 0 // veränderlich
zaehler += 1
val alter: Int = 17 // Typ ausdrücklich
val (x, y) = (3, 4) // Tupel zerlegen
println(s"$konstante $zaehler $alter $x $y")
val ergebnis = if x > 2 then "groß" else "klein" // if ist ein Ausdruck
println(ergebnis)
val block =
val a = 10
val b = 20
a + b // letzter Ausdruck ist der Wert
println(block)
println((1 to 5).sum)Ausgabe:
42 1 17 3 4
groß
30
15Merke
- Scala vereint OOP und funktionale Programmierung auf der JVM
@main def, Einrückungssyntax in Scala 3,val(unveränderlich) vorvar- Fast alles ist ein Ausdruck (
if, Blöcke) - Interpolation mit
s"..."undf"..." - Werkzeuge: scala-cli, sbt, Metals, Scastie
Übungsaufgabe
Gib Name, Alter und das Geburtsjahr mit s"..." aus.
Quiz zur Selbstkontrolle
Worauf läuft Scala hauptsächlich?
- Auf der JVM (richtig)
- Auf der BEAM
- Auf V8
- Auf dem .NET CLR
Was ist der Unterschied zwischen val und var?
- val ist unveränderlich, var veränderlich (richtig)
- val ist veraltet
- val steht für Funktionen
- Es gibt keinen
Wofür ist Apache Spark bekannt?
- Big-Data-Verarbeitung, geschrieben in Scala (richtig)
- Webdesign
- Mobile Apps
- Spielentwicklung
Weiter im Kurs
Weiter: Typen, Kontrollfluss und Funktionen
Alle Kapitel: Scala im Überblick