Kotlin入門(3)「ループ処理をマスターしよう!for文とwhile文の使い方」

スポンサーリンク
Kotlin

前回の振り返り

前回(Day02)では、以下のことを学んだ。

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

今回は、プログラムに「繰り返す力」を与えるループ処理を学んでいこう。同じ処理を何度も書かずに済むようになれば、コードは一気にシンプルになる。

Codespaceを再開しよう

前回から少し間が空いたので、学習を始める前にCodespace環境を再確認しておこう。

  1. GitHubでリポジトリ(kotlin-learning)を開く
  2. 「Code」→「Codespaces」タブを開く
  3. 以前作成したCodespaceが一覧に残っていれば、それをクリックして再開する
  4. 一覧からCodespace自体が消えている場合は、「Create codespace on main」から新規作成し、以下の手順でKotlinとGradleを入れ直す

無料プランの場合、一定期間操作がないとCodespaceは自動的に停止する。さらにそのまま放置すると削除予告メールが届き、期限までに再開しなければ自動的に削除される仕組みである。
ただし、停止中のCodespaceも削除されるまではストレージを消費し続け、これが無料プランの月間ストレージ上限(15GB)を圧迫する。放置していると本来使いたい時に容量不足でCodespacesが使えなくなる可能性があるため、基本的な運用としては、作業が一区切りついたら、git addgit commitgit pushでコードをリポジトリに保存したうえで、自分でCodespaceを削除しておこう。

Codespaceが削除されていた場合のKotlin再インストール

cd /tmp
wget https://github.com/JetBrains/kotlin/releases/download/v2.0.20/kotlin-compiler-2.0.20.zip
unzip kotlin-compiler-2.0.20.zip
sudo mv kotlinc /usr/local/kotlinc
sudo ln -s /usr/local/kotlinc/bin/kotlin /usr/local/bin/kotlin
sudo ln -s /usr/local/kotlinc/bin/kotlinc /usr/local/bin/kotlinc

# 確認
kotlin -version

Kotlin version 2.0.20-release-360 (JRE 21.0.8+9-LTS) のように表示されればインストール成功である。

続けてGradleも確認しておこう。

gradle -version
  1. kotlin -version、gradle -versionが問題なく表示されれば、Kotlinが引き続き使える状態と判断してよい

環境の再確認ができたら、いよいよDay03の内容に入っていこう。

今回学ぶこと

  • forループ(範囲・ステップ)
  • whileループ
  • when式とループの組み合わせ
  • FizzBuzzによる実践

for文で範囲を繰り返す

Kotlinのforループは、範囲(Range)と組み合わせて使うのが基本形である。

for (i in 1..5) {
    println("カウント: $i")
}

1..5 は1から5までの範囲を表す。ステップを指定すれば、2つ飛ばしなどの繰り返しも可能である。

for (i in 2..10 step 2) {
    println(i)
}

while文で条件が満たされる間繰り返す

繰り返す回数があらかじめ決まっていない場合は、while文が適している。

var count = 5
while (count > 0) {
    println("残り: $count")
    count--
}
println("発射!🚀")

実践課題:FizzBuzz

あらかじめsrc/main/kotlin/com/learning/フォルダの中にDay03Loops.ktという名前でファイルを作成しておこう。左側のエクスプローラーでcom.learningフォルダを右クリックし、「New File」からファイル名を入力すれば作成できる。

ファイルを作成したら、それをクリックすると中央にエディタが開く。そこに以下のコードを直接書き込んでもよいし、この記事のコードをコピー&ペーストしても構わない。あるいは、筆者のリポジトリからダウンロードしたDay03Loops.ktをそのままエクスプローラーにドラッグ&ドロップしてアップロードする方法でもよい。

ループ処理の定番課題として、FizzBuzzを実装してみよう。3の倍数なら「Fizz」、5の倍数なら「Buzz」、15の倍数なら「FizzBuzz」、それ以外はそのままの数字を出力する。

// src/main/kotlin/com/learning/Day03Loops.kt
package com.learning

fun main() {
    println("=== Day 3: ループ処理 ===\n")

    // 課題1: forループ(範囲)
    println("1から5まで:")
    for (i in 1..5) {
        println("カウント: $i")
    }

    // 課題2: forループ(ステップ)
    println("\n2の倍数:")
    for (i in 2..10 step 2) {
        println(i)
    }

    // 課題3: whileループ
    println("\nカウントダウン:")
    var count = 5
    while (count > 0) {
        println("残り: $count")
        count--
    }
    println("発射!🚀")

    // 課題4: FizzBuzz
    println("\nFizzBuzz (1-20):")
    for (i in 1..20) {
        when {
            i % 15 == 0 -> println("$i: FizzBuzz")
            i % 3 == 0 -> println("$i: Fizz")
            i % 5 == 0 -> println("$i: Buzz")
            else -> println("$i: $i")
        }
    }
}

前回学んだwhen式とループ処理を組み合わせることで、実用的なプログラムが書けるようになった点に注目したい。

実行するファイルを切り替えよう

このプロジェクトでは複数のレッスン日のコードが同じsrc/main/kotlin/com/learning/フォルダに入っているため、実行したいファイルをbuild.gradle.ktsmainClassで指定する必要がある。

application {
    mainClass.set("com.learning.Day03LoopsKt") // 実行したいファイル名に変更
}

ファイル名の規則は「ファイル名そのまま+Kt」である。

  • Day01Variables.ktDay01VariablesKt
  • Day02Conditionals.ktDay02ConditionalsKt
  • Day03Loops.ktDay03LoopsKt

変更後、保存してから以下のコマンドで実行する。

./gradlew run

トラブルシューティング

bash: ./gradlew: No such file or directoryと出る場合

プロジェクトのルートディレクトリ(/workspaces/kotlin-learning)にいないことが原因である。cd /workspaces/kotlin-learningで移動してから実行し直す。lssettings.gradle.ktsが見えれば正しい場所である。

もしルートに移動してもgradlew自体が存在しない場合は、ルートディレクトリでgradle wrapperを実行してwrapper一式を生成する。このときsettings.gradle.ktsがあるディレクトリ以外(例えばsrc/main/kotlin/comなど)で実行すると、「Project directory … is not part of the build」というエラーになるので、必ずルートで実行すること。

Could not find or load main class com.learning.XxxYyyと出る場合

mainClassの指定で末尾のKtを付け忘れている可能性が高い。com.learning.Day03Loopsではなくcom.learning.Day03LoopsKtのように、必ずKtを付ける。

大量のGradleのログやワーニングが出る場合

BUILD SUCCESSFULという文字と、プログラム自体の出力(printlnで書いた内容)が表示されていれば実行は成功している。それ以外の[Incubating] Problems reportやDeprecated警告、IDLEといった表示はGradle自体のメッセージであり、気にする必要はない。

まとめ

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

  • for文による範囲の繰り返し
  • while文による条件付き繰り返し
  • FizzBuzzによる実践

次回(Day04)は、処理をまとめて再利用できる「関数」について学んでいく。


筆者のリポジトリ

kotlin-learning/src/main/kotlin/com/learning at main · Rocky-Seven/kotlin-learning
Kotlinの学習記録. Contribute to Rocky-Seven/kotlin-learning development by creating an account on GitHub.

コメント

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