Kurz: > Achtung: Scala-Programme brauchen genaue Einrückung bei der Indentation-Syntax; mische Tabs und Leerzeichen nicht.
Teil des Kurses Scala
Syntax-Übersicht
| Konzept | Scala 3 |
|---|---|
| Konstante | val x = 1 |
| Variable | var y = 2 |
| Funktion | def f(a: Int): Int = a + 1 |
| Lambda | x => x * 2 oder _ * 2 |
| Klasse | class A(val n: Int) |
| Datenklasse | case class P(x: Int) |
| Trait | trait T: ... |
| Enum | enum E: case A, B |
| Bedingung | if c then a else b |
| Schleife | for i <- 1 to 3 do ... |
| Match | x match case 1 => ... |
| Option | Some(1), None |
| Interpolation | s"$x", f"$x%.2f" |
| Typklasse | given / using |
Wichtige Collection-Methoden
@main def main(): Unit =
val l = List(3, 1, 2)
val tabelle = List(
"map" -> l.map(_ + 1),
"filter" -> l.filter(_ > 1),
"sorted" -> l.sorted,
"foldLeft" -> l.foldLeft(0)(_ + _),
"zip" -> l.zip(List("a", "b", "c")),
"groupBy" -> l.groupBy(_ % 2).toList.sortBy(_._1),
"flatMap" -> l.flatMap(x => List(x, x)),
"take/drop" -> (l.take(2), l.drop(2)),
)
tabelle.foreach((n, w) => println(s"$n: $w"))Ausgabe:
map: List(4, 2, 3)
filter: List(3, 2)
sorted: List(1, 2, 3)
foldLeft: 6
zip: List((3,a), (1,b), (2,c))
groupBy: List((0,List(2)), (1,List(3, 1)))
flatMap: List(3, 3, 1, 1, 2, 2)
take/drop: (List(3, 1),List(2))Häufige Fehler
@main def main(): Unit =
val x: Int = "text"Fehlermeldung:
Type Mismatch Error@main def main(): Unit =
val x = 1
x = 2Fehlermeldung:
Reassignment to val xAchtung
Scala-Programme brauchen genaue Einrückung bei der Indentation-Syntax; mische Tabs und Leerzeichen nicht.
Weiterführende Quellen
- docs.scala-lang.org: offizielle Dokumentation und Tour
- Scala Book und “Scala 3 Reference”
- scala-cli.virtuslab.org
- Rock the JVM: Kurse und Videos
Merke
- Scala verbindet OOP und funktionale Programmierung auf der JVM
- Unveränderlichkeit, Pattern Matching und Typinferenz sind zentral
Übungsaufgabe
Portiere ein kleines Java-Programm nach Scala und vergleiche den Umfang.
Quiz zur Selbstkontrolle
Auf welcher Plattform läuft Scala hauptsächlich?
- JVM (richtig)
- .NET
- BEAM
- LLVM nur
Was ist der Hauptunterschied von val und var?
- val ist unveränderlich, var veränderlich (richtig)
- Kein Unterschied
- val ist schneller
- var ist privat
Welche Zeichenkette-Interpolation formatiert wie printf?
- f”…” (richtig)
- s”…”
- r”…”
- x”…”
Weiter im Kurs
Zurück: Nebenläufigkeit und Ökosystem
Alle Kapitel: Scala im Überblick