Scala 3:新しいがオプションの構文







これは、Scala3での変更の概要を説明する私のシリーズの最初の記事です。







最も物議を醸している革新から始めましょう:オプションの中括弧制御構造の

新しい構文







オプションの中括弧は、ScalaコードをPythonやHaskellのようにし、インデントを使用して式をグループ化します。現在出版の準備をしている私の本ProgrammingScalaの第3版から取った例を見てみましょう







オプションの中括弧



まず、新旧の構文を使用して型を宣言する方法を見てみましょう。これは、同じファイルで複数のパッケージを宣言する場合のパッケージでも機能します。







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





新しい構文はPythonによく似ており、2つの言語を絶えず切り替えると、混乱する可能性があります。







古いスタイルと新しいスタイルを組み合わせることができます。Dottyコンパイラ(まもなくScala 3に名前が変更されます)は、エラーなしでそのようなコードをコンパイルします。







. , =



, :



.







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