match 式
形状に応じて分岐します。
「match 式」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
matchとは
matchは、Scalaの強力な分岐構文です。値と一連のcaseパターンを指定すると、最初に一致した分岐を実行します。
switch文を、より高機能な式ベースにしたものと考えるとよいでしょう。
基本構文
value match { case pattern => result }と記述します。それぞれのcaseで、パターンと一致したときに実行するコードを定義します。
matchは式なので、全体として値を返します。
object Main {
def main(args: Array[String]): Unit = {
val n = 2
val word = n match {
case 1 => "one"
case 2 => "two"
case 3 => "three"
}
println(word)
}
}ワイルドカードケース
アンダースコア_は、何にでも一致するワイルドカードです。末尾で、すべてを受け取るデフォルトとして使用します。
これがない場合、一致しない値によって実行時にMatchErrorがスローされます。
object Main {
def main(args: Array[String]): Unit = {
val n = 9
val word = n match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
println(word)
}
}文字列のマッチング
パターンは数値に限られません。文字列リテラルを直接マッチングできます。
object Main {
def main(args: Array[String]): Unit = {
val cmd = "start"
val msg = cmd match {
case "start" => "Starting up"
case "stop" => "Shutting down"
case _ => "Unknown command"
}
println(msg)
}
}matchは値を返す
各分岐が値を生成するため、matchの結果をvalに代入したり、インラインで使用したりできます。
これによりコードがすっきりし、可変変数を避けられます。
object Main {
def main(args: Array[String]): Unit = {
val light = "red"
println(s"Action: " + (light match {
case "red" => "stop"
case "green" => "go"
case _ => "caution"
}))
}
}ケースの組み合わせ
|(パイプ)を使うと、1つのケースで複数の値にマッチングできます。指定したすべての値が同じ分岐に進みます。
object Main {
def main(args: Array[String]): Unit = {
val day = "Sat"
val kind = day match {
case "Sat" | "Sun" => "weekend"
case _ => "weekday"
}
println(kind)
}
}関数内のmatch
よく使われる書き方として、関数本体全体を1つのmatch式にします。マッチングの結果が戻り値になります。
object Main {
def describe(n: Int): String = n match {
case 0 => "zero"
case 1 => "one"
case _ => "other"
}
def main(args: Array[String]): Unit = {
println(describe(0))
println(describe(5))
}
}値全体のバインド
ワイルドカードケースでcase other =>と記述すると、マッチした値を名前にバインドできます。その分岐内ではotherを使用できます。
object Main {
def main(args: Array[String]): Unit = {
val n = 42
val result = n match {
case 0 => "nothing"
case other => s"got $other"
}
println(result)
}
}順序が重要
ケースは上から下へテストされ、最初に一致したものが採用されます。より具体的なパターンを一般的なパターンより前に置いてください。
ワイルドカードを早い位置に置くと、その下にあるケースが隠れてしまいます。
object Main {
def main(args: Array[String]): Unit = {
val n = 1
val msg = n match {
case 1 => "specific one"
case _ => "anything else"
}
println(msg)
}
}なぜmatchを使うのか
パターンマッチングがScalaの中心的な機能である理由は、次のとおりです。
- 多方向の分岐を明確に記述できる
- 式として値を返せる
- 型、データ構造、ガードへ拡張できる
- コンパイラーによって網羅性をチェックできる
まとめて使う
これは、リテラル、組み合わせたケース、デフォルトを使った小さな分類器です。
object Main {
def grade(score: Int): String = score match {
case 10 | 9 => "excellent"
case 8 | 7 => "good"
case _ => "keep trying"
}
def main(args: Array[String]): Unit = {
println(grade(9))
println(grade(7))
println(grade(3))
}
}理解度チェック
match式についての理解度を確認しましょう。
まとめ
matchの基本を学びました。
- 構文は
value match { case pattern => result } _はすべてを受け取るワイルドカード|で値を組み合わせられるmatchは値を返す式- ケースは上から下へ試され、最初に一致したものが採用される
よくある質問
「match 式」レッスンは無料ですか?
はい。「match 式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
「match 式」で何を学びますか?
形状に応じて分岐します。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「match 式」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- match 式
- 型と値のマッチング
- ガードと束縛
- デコンストラクション