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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 範囲とコレクションを反復するforループ
- whileとdo-while:使い分け
- forEach、repeat、forEachIndexed
- break、continue、ラベル付きreturn