0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

文より式

すべての式が値を返します。

「文より式」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

すべては式です

多くの言語では、ifやブロックは何かを実行しますが値を生成しない文です。Scalaでは、評価によって値を生成する式です。

この違いが、Scalaにおける関数型プログラミングの中心にあります。

val max = if (3 > 2) 3 else 2

式としてのif

Scalaのif/elseは、実行された分岐の値を返します。その結果を直接valに代入できます。

分岐の中で値を設定する可変変数は必要ありません。

object Main extends App {
  val temp = 18
  val label = if (temp > 20) "warm" else "cool"
  println(label)
}

ブロックは最後の行を返します

{ ... }というブロック自体が式です。その値は、ブロック内の最後の式の値になります。

ここではブロックが30に評価され、それがresultの値になります。

object Main extends App {
  val result = {
    val a = 10
    val b = 20
    a + b
  }
  println(result)
}

明示的なreturnは不要です

メソッド本体は式なので、その値は単純に最後に評価された式になります。returnキーワードはほとんど使いません。

以下の2つのメソッドは同じように動作しますが、慣用的な書き方ではreturnを省略します。

def double(x: Int) = x * 2
// instead of: def double(x: Int) = { return x * 2 }

matchも式です

matchによるパターンマッチングも値を生成するため、入力を結果に対応付けるのに適しています。

各case節が、その分岐の値を生成します。

object Main extends App {
  val day = 3
  val name = day match {
    case 1 => "Mon"
    case 3 => "Wed"
    case _ => "Other"
  }
  println(name)
}

式は組み合わせられます

式は値を返すため、自由にネストしたり組み合わせたりできます。

ifを関数の引数にしたり、より大きな計算の一部にしたりしても、一時変数は必要ありません。

object Main extends App {
  val n = 7
  println("sign: " + (if (n >= 0) "+" else "-"))
}

文も存在します

すべてが有用な値を生成するわけではありません。printlnや代入のように副作用だけを目的とする操作は、Unitに評価されます。

これらはScalaにおける文のような式です。

val x: Unit = println("hello") // value is ()

式を使ってvarを避ける

式を使うスタイルでは、可変なvarのパターンを置き換えられます。varを宣言して分岐内で代入する代わりに、if全体をvalに代入します。

object Main extends App {
  val score = 85
  val grade = if (score >= 90) "A" else if (score >= 80) "B" else "C"
  println(grade)
}

forは値を生成します

yieldを使うforは、単に副作用のためにループするのではなく、新しいコレクションを作る式です。

これにより、反復処理を値を生成する変換として扱えます。

object Main extends App {
  val squares = for (i <- 1 to 4) yield i * i
  println(squares)
}

バックエンドコードで重要な理由

式を中心にしたコードは短くなりやすく、構成要素が少ないため、テストもしやすくなります。

  • 可変変数が少ないほど、バグも少なくなります。
  • 結果が入力から自然に導かれます。
  • Scalaの関数型ライブラリと相性よく組み合わせられます。

文スタイルと式スタイル

2つの考え方を比べてみましょう。文スタイルでは変数を変更し、式スタイルでは値を直接返します。

Scalaではどちらも使えますが、式スタイルが推奨されます。

var s = ""            // statement style
if (true) s = "yes" else s = "no"

val e = if (true) "yes" else "no" // expression style

理解度チェック

Scalaでif/elseは何に評価されますか?

まとめ

Scalaでは、状態を変更するだけの文よりも、値を生成する式が重視されます。

  • if、match、ブロック、for/yieldはいずれも値を返します。
  • メソッド本体は最後の式を返すため、returnはほとんど必要ありません。
  • 副作用を持つコードはUnitを返します。
  • このスタイルにより、varの使用とバグを減らせます。

よくある質問

「文より式」レッスンは無料ですか?

はい。「文より式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

「文より式」で何を学びますか?

すべての式が値を返します。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「文より式」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?

はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. valとvar
  2. 基本型とリテラル
  3. 型推論
  4. 文より式
← Scala for Backend Engineering & Functional Programmingに戻る