0Pricing
Swift Academy · レッスン

効率化のための遅延シーケンス

.lazyで計算を遅延させ、中間配列の作成を避けます。

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

ようこそ

遅延シーケンスは、結果が必要になるまで計算を先送りするため、操作をチェーンするときに中間配列が作成されるのを避けられます。

即時評価の問題

```swift let result = (1...1_000_000) .filter { $0 % 7 == 0 } // creates array of ~142857 elements .map { $0 * 2 } // creates another 142857-element array .prefix(5) // Wasteful — only 5 elements needed! ```

.lazyの追加

```swift let result = (1...1_000_000) .lazy .filter { $0 % 7 == 0 } .map { $0 * 2 } .prefix(5) // Only computes what prefix(5) needs — no intermediate arrays! print(Array(result)) // [14,28,42,56,70] ```

遅延コレクション型

シーケンスに`.lazy`を呼び出すと、Swiftはそれをラップする`LazySequence`を返します: ```swift let lazyArr = [1,2,3].lazy // LazySequence<[Int]> let lazyMap = lazyArr.map { $0*2 } // LazyMapSequence ```

遅延評価が効果を発揮する場合

遅延評価は、次のような場合に効果を発揮します: • 大きなシーケンスの先頭部分だけが必要な場合 • ソースが無限である場合(カスタムジェネレーターなど) • 大きなコレクションに対して、多くの変換をチェーンする場合

無限シーケンス

```swift struct Fibonacci: Sequence { func makeIterator() -> some IteratorProtocol { var a = 0, b = 1 return AnyIterator { let next = a; a = b; b = next + b; return next } } } let first10 = Array(Fibonacci().prefix(10)) ```

first(where:)と遅延評価

```swift let firstEven = (1...Int.max) .lazy .first { $0 % 2 == 0 } // Returns 2 immediately — doesn't iterate the whole range ```

評価の強制

遅延シーケンスを実体化するには、`Array`でラップします: ```swift let eager = Array((1...100).lazy.filter { $0 % 3 == 0 }.map { $0*2 }) ```

遅延評価が常に有利とは限らない

小さなコレクションでは、ラッパー型によるオーバーヘッドが発生します。すべてのチェーンに`.lazy`を適用する前に、ベンチマークを実行してください。コレクションが大きく、早期終了が必要な場合に使用します。

カスタム遅延ジェネレーター

```swift func naturals() -> AnyIterator { var n = 0 return AnyIterator { n += 1; return n } } Array(naturals().prefix(5)) // [1,2,3,4,5] ```

確認問題

コレクションのチェーンに`.lazy`を付けると、何が実現されますか?

まとめ

重要なポイント: • `.lazy`によって、消費されるまで`map`や`filter`の計算を先送りできます • 中間配列の割り当てを避けられます • 先頭部分だけが必要な大きなシーケンスで役立ちます • `prefix`や`first(where:)`と組み合わせて早期終了できます • 必要になったら`Array(lazySeq)`で実体化します コース完了です!

よくある質問

「効率化のための遅延シーケンス」レッスンは無料ですか?

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

「効率化のための遅延シーケンス」で何を学びますか?

.lazyで計算を遅延させ、中間配列の作成を避けます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「効率化のための遅延シーケンス」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 純粋関数と副作用のない設計
  2. 高階関数:map、flatMap、compactMap
  3. 関数合成とパイプライン
  4. 効率化のための遅延シーケンス
← Swift Academyに戻る