0Pricing
Kotlin Academy · レッスン

シーケンスの作成

コレクションとジェネレーターから作成します

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

シーケンスの作成

Sequenceを作成する方法はいくつかあります。既存のコレクションから作成する方法、要素から作成する方法、生成関数を使う方法、ビルダーを使う方法です。このレッスンでは、それぞれを扱います。

asSequenceによるコレクションからの作成

最も一般的な方法は、既存のコレクションでasSequence()を呼び出し、遅延評価で処理することです。

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

sequenceOfによる要素からの作成

sequenceOfは、固定された値の集合から直接シーケンスを作成します。

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

generateSequenceによる無限シーケンス

generateSequenceは、シードと次の要素を計算する関数から、(場合によっては無限の)シーケンスを構築します。takeと組み合わせて、要素数を制限できます。

fun main() {
    val powers = generateSequence(1) { it * 2 }
    val first5 = powers.take(5).toList()
    println(first5)
}

generateSequenceの停止

次の要素を生成する関数がnullを返すと、シーケンスは終了します。これにより、条件が満たされるまで要素を生成できます。

fun main() {
    val countdown = generateSequence(5) { if (it > 1) it - 1 else null }
    println(countdown.toList())
}

シードなしのgenerateSequence

次の値またはnullを返す単一のプロデューサーラムダ式を渡すこともできます。入力ストリームを遅延評価で読み取る場合に便利です。

fun main() {
    var n = 0
    val seq = generateSequence { if (n < 3) n++ else null }
    println(seq.toList())
}

sequenceビルダー

sequence { }ビルダーを使うと、yield(1つの値)とyieldAll(複数の値)によって、命令型のコードで要素を生成できます。

fun main() {
    val seq = sequence {
        yield(1)
        yield(2)
        yieldAll(listOf(3, 4))
    }
    println(seq.toList())
}

遅延的なyield

ビルダーも遅延評価されます。yieldの間にあるコードは、要素が要求されたときにのみ実行されます。takeと組み合わせることで、無限に要素を生成する処理も安全に記述できます。

fun main() {
    val naturals = sequence {
        var i = 1
        while (true) {
            yield(i)
            i++
        }
    }
    println(naturals.take(4).toList())
}

generateSequenceによるフィボナッチ数列

典型的な例として、Pairを状態として使い、フィボナッチ数を遅延評価で生成します。

fun main() {
    val fib = generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }
        .map { it.first }
    println(fib.take(8).toList())
}

コレクションへの再変換

シーケンスが具体的なコレクションになるのは、toList()、toSet()、toMutableList()などの終端操作を呼び出したときです。

fun main() {
    val set = sequenceOf(1, 2, 2, 3).toSet()
    println(set)
}

作成方法の選び方

既存のデータにはasSequence()、固定値にはsequenceOf、計算による系列にはgenerateSequence、独自の命令型生成にはsequence { }ビルダーを使います。

クイックチェック

generateSequenceはいつ停止するかをどのように判断しますか?

復習

asSequence()、sequenceOf、generateSequence(シードと次の要素を使い、nullで終了)、およびyield/yieldAllを使うsequence { }ビルダーでシーケンスを作成できます。次は、遅延操作によって中間リストを回避する方法を見ていきます。

よくある質問

「シーケンスの作成」レッスンは無料ですか?

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

「シーケンスの作成」で何を学びますか?

コレクションとジェネレーターから作成します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「シーケンスの作成」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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