制御構文

Scalaの制御構文(Control Structures)は、プログラムの実行の流れを制御するために使用される文法要素です。ScalaはJavaと同様に命令型の構文を持ちながらも、関数型言語の特徴も備えており、制御構文も柔軟で表現力豊かです。以下ではScalaにおける代表的な制御構文について詳しく説明します。


1. 条件分岐 (if, else)

Scalaのif文は式(expression)として扱われ、値を返します。

scala
val x = 10 val result = if (x > 0) "positive" else "non-positive"

上記のif文は値を返し、resultに文字列が代入されます。ブロック内に複数の文を書くこともできます。

scala
val result = if (x > 0) { println("x is positive") "positive" } else { println("x is not positive") "non-positive" }

2. パターンマッチ (match式)

ScalaではJavaのswitch文に代わる強力な構文としてmatchが使われます。これは式としても使われ、値を返します。

scala
val day = "Mon" val result = day match { case "Mon" => "Workday" case "Sat" | "Sun" => "Weekend" case _ => "Unknown" }

matchはパターンマッチングの機能を活かし、非常に強力で柔軟な条件分岐を実現します。


3. 繰り返し構文

a. whileループ

scala
var i = 0 while (i < 5) { println(i) i += 1 }

条件がtrueの間、繰り返します。

b. do-whileループ

scala
var i = 0 do { println(i) i += 1 } while (i < 5)

少なくとも1回は実行されるループです。

c. for式(内包表記にも使える)

Scalaのforは非常に強力で、イテレータを使ってループ処理を行い、場合によっては値を生成できます。

scala
for (i <- 1 to 5) { println(i) }

toは1から5まで(両端含む)、untilは5未満までを意味します。

複数のジェネレータやフィルタも使用可能です。

scala
for { i <- 1 to 3 j <- 1 to 2 if i != j } println(s"i = $i, j = $j")

値を返すfor式も書けます(yieldを使う)。

scala
val result = for (i <- 1 to 5) yield i * 2 // result: Vector(2, 4, 6, 8, 10)

4. 早期終了 (return)

Scalaでは関数の戻り値は最後の式の評価値ですが、returnを使って明示的に戻すこともできます。

scala
def check(x: Int): String = { if (x < 0) return "negative" "non-negative" }

ただし、関数型プログラミングのスタイルではreturnの使用は最小限にすることが推奨されます。


5. 例外処理 (try, catch, finally)

例外を扱う構文もあります。

scala
try { val result = 10 / 0 } catch { case e: ArithmeticException => println("Divide by zero!") } finally { println("Cleanup code") }

catchは複数のcaseを使ってマッチング処理を行います。


まとめ

構文 特徴
if/else 値を返す式として使用可能
match パターンマッチングによる柔軟な分岐
while/do 条件によるループ処理
for/yield 内包表記によるイテレーションと値生成
return 関数からの明示的な戻り値(推奨されない場合もあり)
try/catch 例外処理とエラーハンドリング

Scalaの制御構文は、命令型プログラミングの直感的な書き方に加えて、関数型のスタイルとも親和性が高い構成になっています。
特にifやmatchが「式」として扱える点は、Scala特有の重要な特徴の一つです。

生成日:2025/05/04