
Dies ist der erste Artikel in meiner Reihe, der einen Überblick über die Änderungen in Scala 3 bietet.
Beginnen wir mit den umstrittensten Neuerungen: optionale geschweifte Klammern und
neue Syntax für Steuerungskonstrukte.
Durch die optionalen geschweiften Klammern ähnelt Scala-Code eher Python oder Haskell, bei denen Einrückungen zum Gruppieren von Ausdrücken verwendet werden. Werfen wir einen Blick auf Beispiele aus der 3. Ausgabe meines Buches Programming Scala , das sich derzeit auf die Veröffentlichung vorbereitet.
Optionale geschweifte Klammern
Schauen wir uns zunächst an, wie ein Typ mit der alten und der neuen Syntax deklariert wird. Dies funktioniert auch für Pakete, wenn wir mehrere Pakete in derselben Datei deklarieren.
//
trait Monoid2[A] {
def add(a1: A, a2: A): A
def zero: A
}
//
trait Monoid3[A]:
def add(a1: A, a2: A): A
def zero: A
Die neue Syntax ähnelt stark Python und kann verwirrend sein, wenn Sie ständig zwischen den beiden Sprachen wechseln.
Sie können alten und neuen Stil mischen. Der Dotty- Compiler (der bald in Scala 3 umbenannt wird) kompiliert diesen Code fehlerfrei.
. , =
, :
.
def m2(s: String): String = {
val result = s.toUpperCase
println(s"output: $result")
result
}
def m3(s: String): String =
val result = s.toUpperCase
println(s"output: $result")
result
:
Scala. , =
, . , .
partial functions, match expressions try-catch-finally ( ):
val o2:Option[Int] => Int = {
case Some(i) => i
case None => 0
}
val o3:Option[Int] => Int =
case Some(i) => i
case None => 0
0 match {
case 0 => "zero"
case _ => "other value"
}
0 match
case 0 => "zero"
case _ => "other value"
Scala Java. ? , , Python, Scala. , Python , , , Scala. data science, Python, data engineering, Scala. Scala Python .
, . , , , Scala . :
import scala.annotation.tailrec
@tailrec def loop(whileTrue: => Boolean)(f: => Unit): Unit =
f
if (whileTrue) loop(whileTrue)(f)
var i=5
loop(i > 0) {
println(i)
i -= 1
}
var j=5
loop(j > 0): // ERROR
println(j)
j -= 1
: "" . loop
while
. . (, .)
Programming Scala, , . , - Scala 3, . , . Scala- . , : Scala Python ( Haskell) — .
, if
, for
while
. :
for (i <- 0 until 5) println(i) //
for i <- 0 until 5 do println(i) //
for i <- 0 until 5 yield 2*i
for i <- 0 until 10
if i%2 == 0
ii = 2*i
yield ii
val i = 10
if (i < 10) println("yes") //
else println("no")
if i < 10 then println("yes") //
else println("no")
for
while
, do
. for
yield
. if
then
.
. -new-syntax
, -old-syntax
— .
-rewrite
, , , .
. , .
Scala 2, . , , . . Java- - , .
, - . .