Ini adalah artikel pertama dalam rangkaian artikel saya yang membahas tentang perubahan di Scala 3.
Mari kita mulai dengan inovasi paling kontroversial: tanda kurung kurawal opsional dan
sintaks baru untuk konstruksi kontrol.
Tanda kurung kurawal opsional membuat kode Scala lebih seperti Python atau Haskell, yang menggunakan lekukan untuk ekspresi grup. Mari kita lihat contoh-contoh yang diambil dari edisi ke-3 buku saya Programming Scala , yang sekarang sedang dipersiapkan untuk diterbitkan.
Kawat gigi keriting opsional
Pertama, mari kita lihat mendeklarasikan tipe menggunakan sintaks lama dan baru. Ini juga berfungsi untuk paket jika kita mendeklarasikan beberapa paket dalam file yang sama.
//
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
Sintaks baru ini sangat mirip dengan Python, dan dapat membingungkan jika Anda terus-menerus beralih di antara kedua bahasa tersebut.
Anda dapat mencampur gaya lama dan baru, kompiler Dotty (segera diganti namanya menjadi Scala 3) akan mengkompilasi kode tersebut tanpa kesalahan.
. , =
, :
.
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- - , .
, - . .