0Pricing
Kotlin Academy · レッスン

forEach、repeat、forEachIndexed

関数型スタイルの反復ヘルパーを学び、従来のループより適した場面を理解します。

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

関数型の反復処理

for以外にも、Kotlinには高階関数による反復処理としてforEach、forEachIndexed、repeatがあります。小さなループをより表現豊かに記述できます。

forEachの基本

forEachはラムダを受け取り、すべての要素に対して実行します。要素には暗黙的にitという名前が付けられます。

fun main() {
    val items = listOf("a", "b", "c")
    items.forEach { println(it) }
}

名前付きパラメーターを使ったforEach

itでは読みづらい場合は、ラムダパラメーターにわかりやすい名前を付けます。

fun main() {
    val users = listOf("Alice", "Bob", "Charlie")
    users.forEach { name ->
        println("Hello, $name!")
    }
}

固定回数の反復に使うrepeat

repeat(n)はブロックを正確にn回実行します。ラムダには反復インデックス(0始まり)が渡されます。

fun main() {
    repeat(5) {
        println("Iteration $it")
    }
}

副作用に使うrepeat

区切り文字の出力や呼び出しの再試行など、単純な処理をn回実行する場合はrepeatを使います。

fun main() {
    repeat(3) { println("-".repeat(20)) }
}

forEachIndexed

forEachIndexedはインデックスと要素の両方をラムダに渡します。

fun main() {
    val words = listOf("Hello", "Kotlin", "World")
    words.forEachIndexed { index, word ->
        println("$index: $word")
    }
}

forEachとforの比較

forEachは簡潔ですが、breakとcontinueは使えません。早期終了が必要な場合は、従来のforを使います。

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    // forEach: runs to completion
    nums.forEach { print("$it ") }
    println()
    // for: can break
    for (n in nums) {
        if (n == 3) break
        print("$n ")
    }
    println()
}

forEachからのreturn

ラベル付きのreturn@forEachを使うと、forEachでcontinueと同様の動作を実現できます。

fun main() {
    listOf(1, 2, 3, 4).forEach {
        if (it % 2 == 0) return@forEach // skip
        println("odd: $it")
    }
}

Mapに対するforEach

マップに対するforEachでは、各Map.Entryがitとして公開されます。読みやすくするには分解を使います。

fun main() {
    val scores = mapOf("Alice" to 9, "Bob" to 7)
    scores.forEach { (name, score) ->
        println("$name -> $score")
    }
}

repeatと他の呼び出しの連結

repeatはUnitを返すため、関数型に呼び出しを連結することはできません。副作用のためだけに使います。

fun main() {
    var sum = 0
    repeat(10) { sum += it }
    println("Sum 0..9 = $sum") // 45
}

パフォーマンスに関する注意

大規模なコレクションに対するタイトなループでは、ラムダの生成を避けられるため、通常のforのほうがわずかに高速です。読みやすさを優先する場合はforEachを使います。

fun main() {
    val n = 1_000_000
    var sum = 0L
    for (i in 1..n) sum += i
    println(sum)
}

クイックチェック

ラムダにインデックスと要素の両方を渡す構造はどれですか。

まとめ

forEach:要素ごとにラムダを実行します。forEachIndexed:インデックスと要素を渡します。repeat(n):固定回数のループを実行します。いずれも通常のbreakには対応していないため、早期終了にはforを使います。

よくある質問

「forEach、repeat、forEachIndexed」レッスンは無料ですか?

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

「forEach、repeat、forEachIndexed」で何を学びますか?

関数型スタイルの反復ヘルパーを学び、従来のループより適した場面を理解します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「forEach、repeat、forEachIndexed」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 範囲とコレクションを反復するforループ
  2. whileとdo-while:使い分け
  3. forEach、repeat、forEachIndexed
  4. break、continue、ラベル付きreturn
← Kotlin Academyに戻る