Kotlin入門(2)「条件分岐をマスターしよう!if文とwhen式の使い方」

スポンサーリンク
Kotlin

前回(Day01)では、Kotlinの変数の基礎(valvar)を学んだ。今回は、プログラムに「判断する力」を与える条件分岐を学んでいこう。

前回の振り返り

前回では以下のことを学んだ。

  • val(変更不可)とvar(変更可能)の違い
  • 変数の宣言と使い方
  • エラーメッセージの読み方

今回はこの知識をベースに、より実用的なプログラムを作っていこう。

学習の全体像

第2回(Day02)は、4週間の学習プランの一部である。全体の学習計画は以下のリンクから確認できる。(私のGitHub)

STUDYPLAN.md – Kotlin 4週間学習プラン

現在の位置を確認

  • 第1週: 基礎文法(変数、制御構文、関数)← 今ここ(第2回)
  • 第2週: オブジェクト指向とコレクション操作
  • 第3週: 高度な機能
  • 第4週: 実践プロジェクト

この学習プランに沿って進めることで、4週間でKotlinの基礎から実践まで体系的に学べる。

今回学ぶこと:条件分岐

条件分岐とは、「もし〜ならば〜する」という処理のこと。
例えば、

  • 「もし年齢が18歳以上なら成人と表示する」
  • 「もし点数が60点以上なら合格と表示する」
  • 「曜日によって異なるメッセージを表示する」

Kotlinには主に2つの条件分岐がある。

  1. if文/if式 – 2択または少数の条件に使う
  2. when式 – 多くの条件を扱う時に便利

それでは実際に進めていこう。

構築したCodespacesを開こう

  1. ブラウザでGitHubリポジトリを開く
  2. 「Code」→「Codespaces」→ 構築したCodespaceを選択する
  3. ターミナルが開いていることを確認する

第2回の練習ファイルを作成しよう

ターミナルで以下のコマンドを実行して、練習ファイルを作成しよう。

# 練習ファイルを作成
cat > src/main/kotlin/com/learning/Day02Conditionals.kt << 'EOF'
package com.learning

fun main() {
    println("=== Day 2: 条件分岐の基礎 ===\n")
    
    // 課題1: 基本的なif文
    val age = 20
    println("年齢: ${age}歳")
    
    if (age >= 18) {
        println("あなたは成人です")
    } else {
        println("あなたは未成年です")
    }
    
    // 課題2: if式(値を返す)
    val score = 75
    val result = if (score >= 60) "合格" else "不合格"
    println("\nスコア: $score点 → $result")
    
    // 課題3: when式(範囲による分岐)
    val grade = 85
    val evaluation = when {
        grade >= 90 -> "A: 優秀"
        grade >= 80 -> "B: 良好"
        grade >= 70 -> "C: 普通"
        grade >= 60 -> "D: もう少し"
        else -> "F: 再試験"
    }
    println("\n成績: $grade点 → $evaluation")
    
    // 課題4: when式(値による分岐)
    val dayOfWeek = 3
    val dayName = when (dayOfWeek) {
        1 -> "月曜日"
        2 -> "火曜日"
        3 -> "水曜日"
        4 -> "木曜日"
        5 -> "金曜日"
        6 -> "土曜日"
        7 -> "日曜日"
        else -> "不明"
    }
    println("\n今日は$dayName です")
    
    // 課題5: 複数条件の組み合わせ
    val temperature = 25
    val isRaining = false
    
    println("\n=== 今日の天気 ===")
    println("気温: ${temperature}℃")
    println("雨: ${if (isRaining) "降っている" else "降っていない"}")
    
    val recommendation = when {
        temperature >= 30 -> "暑いです!水分補給を忘れずに"
        temperature >= 20 && !isRaining -> "過ごしやすい天気です"
        temperature >= 20 && isRaining -> "傘を持って出かけましょう"
        temperature >= 10 -> "少し肌寒いです。上着があると良いでしょう"
        else -> "寒いです!暖かい服装で"
    }
    println("アドバイス: $recommendation")
    
    // チャレンジ課題: 自分の情報で判定してみよう
    println("\n=== チャレンジ課題 ===")
    val myScore = 0 // ← ここを変更してみよう(0-100)
    val myAge = 0   // ← ここを変更してみよう
    
    // ここにコードを書いてみよう!
}
EOF

build.gradle.ktsを編集して実行する

Step 1: build.gradle.ktsを編集

左側のファイルツリーから build.gradle.kts を開いて、最後の部分を変更しよう

変更前:

application {
    mainClass.set("com.learning.Day01VariablesKt")
}

変更後:

application {
    mainClass.set("com.learning.Day02ConditionalsKt")
}

Step 2: 実行してみよう

pwd
# /workspaces/kotlin-learning を確認しよう

./gradlew run

実行結果の例

> Task :run
=== Day 2: 条件分岐の基礎 ===

年齢: 20歳
あなたは成人です

スコア: 75点 → 合格

成績: 85点 → B: 良好

今日は水曜日 です

=== 今日の天気 ===
気温: 25℃
雨: 降っていない
アドバイス: 過ごしやすい天気です

=== チャレンジ課題 ===
学習のヒント:
1. myScore と myAge に値を入れてみましょう
2. if文 や when式 を使って判定を作ってみましょう
3. 複数の条件を組み合わせてみましょう

BUILD SUCCESSFUL in 3s

各課題のポイント

課題1: 基本的なif文

if (age >= 18) {
    println("あなたは成人です")
} else {
    println("あなたは未成年です")
}
  • >= は「以上」を意味する
  • 条件が真(true)なら上のブロック、偽(false)なら下のブロックが実行される

課題2: if式(Kotlinの特徴!)

val result = if (score >= 60) "合格" else "不合格"

Kotlinではif文が値を返すことができる。これをif式と呼ぶ。
他の多くの言語では、if文は値を返さないが、Kotlinでは式として使える。

課題3: when式(範囲による分岐)

val evaluation = when {
    grade >= 90 -> "A: 優秀"
    grade >= 80 -> "B: 良好"
    grade >= 70 -> "C: 普通"
    grade >= 60 -> "D: もう少し"
    else -> "F: 再試験"
}

when式は複数の条件を美しく書ける。上から順に評価され、最初に当てはまった条件の値が返される。

課題4: when式(値による分岐)

val dayName = when (dayOfWeek) {
    1 -> "月曜日"
    2 -> "火曜日"
    3 -> "水曜日"
    // ...
    else -> "不明"
}

特定の値に応じて処理を分岐できる。他の言語のswitch文に似ているが、より強力である。

課題5: 複数条件の組み合わせ

val recommendation = when {
    temperature >= 30 -> "暑いです!"
    temperature >= 20 && !isRaining -> "過ごしやすい天気です"
    temperature >= 20 && isRaining -> "傘を持って出かけましょう"
    // ...
}
  • && は「かつ(AND)」を意味する
  • ! は「〜でない(NOT)」を意味する
  • 複雑な条件も組み合わせられる

エラーを体験しよう

学習の一環として、意図的にエラーを起こしてみよう。
Day02Conditionals.kt の最後に以下を追加してみよう。

// エラー体験: when式のelse忘れ
val testScore = 50
val testResult = when {
    testScore >= 80 -> "優秀"
    testScore >= 60 -> "合格"
    // else を書かないとエラー!
}

実行してみよう。

./gradlew run

期待されるエラー

e: 'when' expression must be exhaustive, add necessary 'else' branch

これは「when式は全てのケースを網羅する必要がある」というエラーである。
elseを追加して修正しよう。

val testResult = when {
    testScore >= 80 -> "優秀"
    testScore >= 60 -> "合格"
    else -> "不合格" // これを追加
}

再度実行すると、エラーなく動作するはずである。

ポイント: Kotlinは安全性を重視している
when式では全てのケースを考慮するよう促してくれる。

チャレンジ課題

Day02Conditionals.kt のチャレンジ課題セクションを完成させよう。

例1: スコア判定を追加

val myScore = 88 // 自分のスコアに変更

val myEvaluation = when {
    myScore >= 90 -> "A: 素晴らしい!"
    myScore >= 80 -> "B: よくできました"
    myScore >= 70 -> "C: 合格です"
    myScore >= 60 -> "D: もう一息"
    else -> "F: 復習しましょう"
}

println("あなたのスコア: $myScore点")
println("評価: $myEvaluation")

例2: 年齢層判定を追加

val myAge = 25 // 自分の年齢に変更

val ageGroup = when {
    myAge < 13 -> "子供"
    myAge < 20 -> "ティーンエイジャー"
    myAge < 30 -> "若者"
    myAge < 60 -> "中年"
    else -> "シニア"
}

println("あなたの年齢: ${myAge}歳")
println("年齢層: $ageGroup")

例3: 複合条件チャレンジ

val myScore = 75
val myAge = 22

println("\n=== 複合判定 ===")

// スコアと年齢の両方を考慮した判定
val message = when {
    myScore >= 80 && myAge < 20 -> "若くて優秀!将来有望です"
    myScore >= 80 && myAge >= 20 -> "素晴らしい成績です!"
    myScore >= 60 && myAge < 20 -> "まだまだ伸びしろがあります"
    myScore >= 60 && myAge >= 20 -> "合格です。よく頑張りました"
    myAge < 20 -> "若いうちに頑張りましょう"
    else -> "諦めずに挑戦し続けましょう"
}

println(message)

学習内容を保存しよう

練習ファイルを修正・実行した後は、以下の通り実行してGitに保存しよう。

# 1. 変更したファイルをステージング
git add .

# 2. コミット(変更内容を記録)
git commit -m "Day02: 条件分岐の学習完了"

# 3. GitHubにプッシュ
git push

これで、どこからでも続きが試せるし、学習の履歴も残せる。

便利なコマンドまとめ

# プログラムを実行
./gradlew run

# 現在のディレクトリ確認
pwd

# ファイル一覧
ls -la src/main/kotlin/com/learning/

# Gitの状態確認
git status

まとめ

今回学んだこと。

  1. if文/if式 – 2択の条件分岐
  2. if式の特徴 – 値を返せる(Kotlinの強み)
  3. when式 – 複数条件を美しく扱える
  4. 複数条件の組み合わせ&&(AND)、||(OR)、!(NOT)
  5. エラーの理解 – when式は全ケースを網羅する必要がある

次回は、第3回(Day03) ループ処理を学ぶ予定である。同じ処理を繰り返す方法(forwhile)を学んでいこう。

詳しい学習計画は STUDYPLAN.md(私のGitHub) を参照しよう。第1週の後半では、ループ処理と関数の基礎を学び、FizzBuzzや簡単な電卓プログラムを作成していく。

コメント

タイトルとURLをコピーしました