Scala 3: syntaxe nouvelle mais facultative







Ceci est le premier article de ma série d'articles couvrant les changements de Scala 3.







Commençons par les innovations les plus controversées: accolades optionnelles et

nouvelle syntaxe pour les constructions de contrôle.







Les accolades facultatives rendent le code Scala plus semblable à Python ou Haskell, qui utilise l'indentation pour regrouper les expressions. Jetons un coup d'œil à des exemples tirés de la 3e édition de mon livre Programming Scala , qui est actuellement en préparation pour publication.







Bretelles bouclées en option



Tout d'abord, regardons la déclaration d'un type en utilisant l'ancienne et la nouvelle syntaxe. Cela fonctionne également pour les packages si nous déclarons plusieurs packages dans le même fichier.







//  
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
      
      





La nouvelle syntaxe est très similaire à Python, et cela peut être déroutant si vous basculez constamment entre les deux langages.







Vous pouvez mélanger l'ancien et le nouveau style, le compilateur Dotty (bientôt renommé en Scala 3) compilera ce code sans erreur.







. , =



, :



.







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- - , .







, - . .








All Articles