Kotlin Academy · レッスン

シーケンスを使う理由

遅延評価を学びます

レッスン 1/413 ステップ

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

Sequenceとは

Sequenceはコレクションに似ていますが、要素を遅延評価します。終端操作によって結果が要求されるまで操作は実行されず、要素はチェーン全体を一度に1つずつ流れていきます。

コレクションの即時評価

標準的なコレクション操作は即時評価されます。各ステップ(filter、map)でリスト全体が処理され、次のステップが始まる前に新しい中間リストが作成されます。

fun main() {
    val result = listOf(1, 2, 3, 4)
        .map { it * 2 }
        .filter { it > 4 }
    println(result)
}

中間リストのコスト

データが大きい場合、即時評価ではステップごとに新しいリストが割り当てられます。操作数が多い場合や数百万個の要素を扱う場合、メモリと時間が無駄になります。

遅延シーケンス

シーケンスは、次の要素へ進む前に、各要素をパイプライン全体に通して処理します。中間リストは作成されません。asSequence()で変換できます。

fun main() {
    val result = listOf(1, 2, 3, 4)
        .asSequence()
        .map { it * 2 }
        .filter { it > 4 }
        .toList()
    println(result)
}

実行順序の確認

出力処理を追加すると違いが明らかになります。シーケンスでは、次の要素が始まる前に、各要素がmap、次にfilterを通過します。

fun main() {
    listOf(1, 2, 3).asSequence()
        .map { println("map $it"); it * 2 }
        .filter { println("filter $it"); it > 2 }
        .toList()
}

即時評価の実行順序

通常のリストと比較してみましょう。mapが最初にすべての要素に対して実行され、その後、filterがすべての要素に対して実行されます。

fun main() {
    listOf(1, 2, 3)
        .map { println("map $it"); it * 2 }
        .filter { println("filter $it"); it > 2 }
}

短絡評価

遅延評価では短絡評価が可能です。firstやfindなどの操作は、結果が見つかるとすぐに停止するため、残りの要素を処理せずに済みます。

fun main() {
    val firstBig = (1..1000000).asSequence()
        .map { it * 2 }
        .first { it > 10 }
    println(firstBig)
}

中間操作と終端操作

シーケンスの操作は、次の2種類に分かれます。

  • 中間操作(map、filter、take):遅延評価され、別のシーケンスを返します。
  • 終端操作(toList、sum、first):計算を開始し、値を生成します。

終端操作がなければ何も起こらない

中間操作だけのチェーンではコードは実行されません。終端操作が呼び出されるまで、ラムダ式は一度も実行されません。

fun main() {
    val seq = listOf(1, 2, 3).asSequence()
        .map { println("processing $it"); it }
    println("Nothing printed yet")
    seq.toList()
}

シーケンスが役立つ場面

シーケンスは、大規模なデータセットや長い操作チェーンを扱う場合、または結果の一部だけ(最初に一致する要素など)が必要な場合に効果を発揮します。小さなリストでは、通常のコレクションのほうが簡単で、速度も同程度です。

イメージで理解する

コレクションは横方向の層として、各ステップですべての要素を処理すると考えてください。一方、シーケンスは縦方向のストリームとして、1つの要素をすべてのステップに通して処理します。これが、シーケンスで中間リストが不要になる理由です。

クイックチェック

シーケンスはなぜコレクションより効率的になることがあるのですか?

復習

シーケンスはデータを遅延評価し、中間操作のチェーンを要素ごとに処理します。計算は終端操作によってのみ開始されます。これにより中間リストを避け、短絡評価を利用できます。次は、シーケンスの作成方法を学びます。

無料で開始

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

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

コース
51
レッスン
203

よくある質問

「シーケンスを使う理由」レッスンは無料ですか?

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

「シーケンスを使う理由」で何を学びますか?

遅延評価を学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「シーケンスを使う理由」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. シーケンスを使う理由
  2. シーケンスの作成
  3. 遅延操作
  4. シーケンスとコレクション
← Kotlin Academyに戻る