Kotlin Academy · レッスン

break、continue、ラベル付きreturn

breakとcontinueでループの流れを制御し、ラベルでネストしたループから抜けます。

レッスン 4/413 ステップ

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

ループのフロー制御

Kotlinはbreak(ループを終了)、continue(次の反復へスキップ)、さらにネストしたループから抜けるためのラベルをサポートしています。

breakの基本

breakは、直近の外側にあるループをすぐに終了します。

fun main() {
    for (i in 1..10) {
        if (i == 5) break
        print("$i ")
    }
    println() // 1 2 3 4
}

continueの基本

continueは現在の反復の残りをスキップし、次の反復へ進みます。

fun main() {
    for (i in 1..10) {
        if (i % 2 == 0) continue
        print("$i ")
    }
    println() // 1 3 5 7 9
}

ラベル付きループ

ループにlabel@でタグを付け、break@labelまたはcontinue@labelから参照すると、ネストしたループの内側から外側のループを制御できます。

fun main() {
    outer@ for (i in 1..3) {
        for (j in 1..3) {
            if (i == 2 && j == 2) break@outer
            println("$i,$j")
        }
    }
}

ラベル付きcontinue

continue@outerを使うと、外側のループの次の反復へスキップできます。

fun main() {
    outer@ for (i in 1..3) {
        for (j in 1..3) {
            if (j == 2) continue@outer
            println("i=$i j=$j")
        }
    }
}

return@lambda

forEachなどのインライン関数の内部では、通常のreturnは外側の関数を終了します。ラムダだけを終了するにはreturn@forEachを使います。

fun main() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach
        println(it)
    }
    println("Done")
}

ラムダでの非ローカルreturn

ラムダがforEachのようなインライン関数の場合、通常のreturnは外側の関数全体を終了します。意外に感じることがある動作です。

fun process() {
    listOf(1, 2, 3).forEach {
        if (it == 2) return // exits process()
        println(it)
    }
    println("never printed")
}
fun main() { process() }

ラムダのカスタムラベル

name@を使うと、ラムダに明示的なラベルを付けて、return先をわかりやすくできます。

fun main() {
    listOf(1, 2, 3, 4).forEach loop@{
        if (it == 3) return@loop
        println(it)
    }
}

whileでのbreak

breakとcontinueは、whileとdo-whileでも同じように機能します。

fun main() {
    var i = 0
    while (true) {
        if (i >= 3) break
        println("i = $i")
        i++
    }
}

ラベルとcontinueの組み合わせ

ラベルとcontinueを使うと、フラグ変数なしでネストしたアルゴリズムの反復全体をスキップできます。

fun main() {
    val grid = listOf(listOf(1,2,0), listOf(3,4,5), listOf(0,6,7))
    rows@ for (row in grid) {
        for (cell in row) {
            if (cell == 0) continue@rows
            print("$cell ")
        }
        println()
    }
}

ラベルを使わないほうがよい場合

ラベルを使うと複雑さが増します。頻繁にラベルを使いたくなる場合は、内側のループを通常のreturnを使う関数として切り出すことを検討してください。

fun firstMatch(grid: List<List<Int>>, target: Int): Pair<Int,Int>? {
    for (r in grid.indices) for (c in grid[r].indices) {
        if (grid[r][c] == target) return r to c
    }
    return null
}
fun main() {
    val g = listOf(listOf(1,2),listOf(3,4))
    println(firstMatch(g, 3))
}

クイックチェック

Kotlinで、内側のループから外側のループを終了するにはどうしますか。

まとめ

breakは直近のループを終了し、continueは次の反復へスキップします。ネストしたループを制御するには、label@とbreak@labelまたはcontinue@labelを使います。ラムダでは、非ローカルな終了を避けるため、returnよりreturn@forEachを優先します。

無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「break、continue、ラベル付きreturn」レッスンは無料ですか?

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

「break、continue、ラベル付きreturn」で何を学びますか?

breakとcontinueでループの流れを制御し、ラベルでネストしたループから抜けます。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「break、continue、ラベル付きreturn」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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