Swift Academy · Урок

Ленивые последовательности для повышения эффективности

Используйте .lazy, чтобы отложить вычисления и не создавать промежуточные массивы.

Урок 4 из 412 шагов

«Ленивые последовательности для повышения эффективности» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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)` Курс завершён!
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Ленивые последовательности для повышения эффективности» бесплатный?

Да — полный текст урока «Ленивые последовательности для повышения эффективности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Ленивые последовательности для повышения эффективности»?

Используйте .lazy, чтобы отложить вычисления и не создавать промежуточные массивы. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Ленивые последовательности для повышения эффективности»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чистые функции и проектирование без побочных эффектов
  2. Функции высшего порядка: map, flatMap, compactMap
  3. Композиция функций и конвейеры
  4. Ленивые последовательности для повышения эффективности
← Назад к Swift Academy