1. 概要

if-else 構文は、プログラミング言語で最も基本的な条件付き構文の1つです。 条件の値に基づいてコードを実行できます。 このチュートリアルでは、Scalaの条件式について説明します。

2. if

Scalaのif式の構文は、JavaやC++などの他の命令型言語に似ています。

if (<condition expression>) {
  <expression>
} else {
  <expression>
}

ここでの条件式は、booleanに評価される式を示します。 boolean条件がtrueと評価された場合、最初の式が実行されます。 それ以外の場合は、2番目の式が実行されます。

if式のelse部分はオプションです。 else式がないことは完全に有効です。

基本的なif式を見てみましょう。

def max(a: Int, b: Int): Unit = {
  var max: Int = a

  if (b > a) {
    max = b
  }

  printf("Maximum is %d", max)
}

ここでは、指定された2つの入力の最大値を出力するfunction maxを定義します。 まず、maxaの値で初期化します。 次に、baより大きいかどうかを確認し、大きい場合は、maxbの値を割り当てます。 最後に、maxの値を使用して最大値を出力します。

if式とelse式を使用する例を見てみましょう。

if (10 % 2 == 0) {
  printf("Number is even")
} else {
  printf("Number is odd")
}

10は2で割り切れるので、コードは次のように出力します。

Number is even

式にステートメントが1つしかない場合は、中括弧をスキップできます。 これらは、式に複数のステートメントがある場合にのみ必要です。 ただし、 Scalaスタイルガイドでは、中括弧を使用してコードを読みやすくすることを推奨しています。

2.1. ネストされたif

if の各式は、 if-else 式とさらにネストして、複数のif-elseブロックを作成できます。 ネストされたif式を見てみましょう。

val number = 10
if (number == 0) {
  printf("Number is zero")
} else if (number > 100) {
  printf("Number is greater than 100")
} else {
  printf("Number is %d", number)
}

numberの値は10です。 したがって、最初の2つのif条件はfalseと評価され、最後のelse式が実行されます。

Number is 10

2.2. 戻り値とタイプ

Scalaのifは、1つの重要な点で他の言語とは異なります。

Scalaでは、すべてのステートメントは値を返す式です。 最後のステートメントの値によって、式の値が決まります。 if 式も例外ではなく、は常に値を返します。

したがって、if式の結果を値に割り当てることができます。 以前のmax関数は次のように記述できます。

def max(a: Int, b: Int): Int = {
  if (b > a) {
    b
  } else {
    a
  }
}

ここでは、 if 式の値を直接返します。これにより、abの最大値が返されます。

if式のreturn型は、2つの分岐式の最も近いスーパータイプです。 上記の例の戻りタイプはIntです。これは、両方のブランチがIntを返すためです。

else式のないif式も値を返します。 else 式がない場合、戻りタイプはAny。です。

ScalaREPLで次のことを簡単に確認できます。

scala> val result = if (false) "failed"
result: Any = ()

3. 慣用的な条件付き初期化

if 式を使用することは、Scalaの変数を条件付きで初期化する慣用的な方法です。 コードの記述が少なくなるだけでなく、varの代わりにvalを使用します。

val を使用すると、可変性を回避し、コードの可読性を向上させることができます。 これは、初期化されると値が変更されないことをユーザーに通知します。

val max: Int = if (10 > 100) {
  10
} else {
  100
}

ここで、 max は、10が100以下であるため、値100で初期化されます。

Javaとは異なり、 Scalaには、簡潔なif-else式を記述するための三項演算子がありません。

Scalaのif式は常に値を返すため、三項演算子を持つことは冗長になります。 これは、より少ないリソースでより多くのことを行うScalaの方法です。

4. 結論

この記事では、Scalaのif式とその構文について説明しました。 if 式は常に値を返すことを学び、それを使用して変数を条件付きで初期化する方法を学びました。 いつものように、すべてのコード例はGitHubから入手できます。