文より式
すべての式が値を返します。
「文より式」は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フィードバックを取得できます。ローカル設定は不要です。