シーケンスを使う理由
遅延評価を学びます
「シーケンスを使う理由」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- シーケンスを使う理由
- シーケンスの作成
- 遅延操作
- シーケンスとコレクション