0Pricing
Kotlin Academy · レッスン

式としてのwhen

whenから値を返します

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

式としてのwhen

Kotlinのwhenは、単なるswitch文ではありません。式であるため、値を生成して代入したり返したりできます。

これにより、分岐ロジックを簡潔で読みやすく記述できます。

値を返す

式として使用すると、各分岐が結果を提供します。一致した分岐の値が、when式全体の結果になります。

fun main() {
    val day = 3
    val name = when (day) {
        1 -> "Monday"
        2 -> "Tuesday"
        3 -> "Wednesday"
        else -> "Other"
    }
    println(name)
}

elseが必要

式として使用する場合、whenは網羅的でなければなりません。任意の値を扱う場合は、else分岐が必要です。

elseがなければ、コンパイラーは値が生成されることを保証できません。

fun grade(score: Int): String = when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    else -> "C"
}

fun main() {
    println(grade(85))
}

1つの分岐に複数の値

複数の値をコンマで区切ると、1つの分岐でまとめて扱えます。

同じ本体を繰り返すよりも、すっきり記述できます。

fun main() {
    val day = 6
    val type = when (day) {
        1, 2, 3, 4, 5 -> "Weekday"
        6, 7 -> "Weekend"
        else -> "Invalid"
    }
    println(type)
}

引数なしのwhen

対象を省略すると、各分岐がブール条件になります。

if/else ifの連鎖を、整ったブロックに置き換えられます。

fun main() {
    val temp = 18
    val feel = when {
        temp < 0 -> "Freezing"
        temp < 15 -> "Cold"
        temp < 25 -> "Mild"
        else -> "Hot"
    }
    println(feel)
}

分岐での範囲

inを使って、分岐で範囲を判定できます。

数値を範囲ごとに分類する処理を、自然に表現できます。

fun main() {
    val score = 73
    val band = when (score) {
        in 0..59 -> "Fail"
        in 60..79 -> "Pass"
        in 80..100 -> "Excellent"
        else -> "Invalid"
    }
    println(band)
}

分岐での型チェック

isを使って、分岐で型をチェックできます。

各分岐の結果は異なる型でもよく、whenは共通の型を返します。

fun describe(x: Any): String = when (x) {
    is Int -> "Integer"
    is String -> "Text"
    else -> "Unknown"
}

fun main() {
    println(describe(42))
    println(describe("hi"))
}

分岐ブロック

分岐を複数の文からなるブロックにできます。ブロックの最後の式が、その値になります。

fun main() {
    val n = 5
    val result = when {
        n > 0 -> {
            val doubled = n * 2
            "Positive, doubled is " + doubled
        }
        else -> "Non-positive"
    }
    println(result)
}

whenを直接返す

単一式本体を使って、関数からwhen式を直接返すことができます。

これはKotlinで非常によく使われる、すっきりした書き方です。

fun sign(n: Int): String = when {
    n > 0 -> "positive"
    n < 0 -> "negative"
    else -> "zero"
}

fun main() {
    println(sign(-4))
}

対象を捕捉する

whenの内部で対象を宣言すると、各分岐からその対象を利用できます。

一時的な値のスコープを必要最小限に保てます。

fun describeLength(text: String): String = when (val len = text.length) {
    0 -> "empty"
    in 1..5 -> "short (" + len + ")"
    else -> "long (" + len + ")"
}

fun main() {
    println(describeLength("hello"))
}

まとめ

式としてのwhenは、値を生成する強力な仕組みです。

  • 各分岐が結果を提供します
  • elseによって網羅的になります
  • コンマ、範囲、型、ブロックをサポートします
fun ticketPrice(age: Int): Int = when {
    age < 6 -> 0
    age < 18 -> 10
    age >= 65 -> 8
    else -> 15
}

fun main() {
    println(ticketPrice(4))
    println(ticketPrice(70))
}

理解度チェック

式としてのwhenについての理解度を確認しましょう。

まとめ

whenを式として使う方法を学びました。

  • 一致した分岐の値を返します
  • 網羅的にするにはelseが必要です
  • コンマ、範囲、型チェック、ブロックをサポートします

次は、スマートキャストによってコンパイラーが型を絞り込む仕組みを学びます。

よくある質問

「式としてのwhen」レッスンは無料ですか?

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

「式としてのwhen」で何を学びますか?

whenから値を返します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

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

「式としてのwhen」レッスンにはどのくらい時間がかかりますか?

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

このKotlin Academyレッスンでコードを書いて実行できますか?

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

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

  1. 式としてのwhen
  2. スマートキャスト
  3. isとas演算子
  4. 網羅的なwhen
← Kotlin Academyに戻る