Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpLzGn 85 of 224 menu
◀ ▶

Порождение элементов в Dart

Не каждая цепочка начинается с готовой коллекции. Функция с sync* и yield выдает элементы по одному: локальная переменная хранит текущее значение, а тело цикла задает следующий шаг.

Старт с единицы и шаг плюс один дают натуральный ряд. Без ограничения длины пример не закончился бы, поэтому сразу возьмем первые пять чисел:

Iterable<int> naturals(int n) sync* { while (true) { yield n; n = n + 1; } } final picked = naturals(1).take(5).toList(); print(picked);

Тот же механизм подходит для геометрической прогрессии: текущее значение умножается на два на каждом шаге:

Iterable<int> powers(int n) sync* { while (true) { yield n; n = n * 2; } } final powersList = powers(1).take(4).toList(); print(powersList);

Метод take здесь обязателен: иначе конечное действие пыталось бы пройти бесконечный ряд. Ограничение длины обрывает генерацию, когда набрано нужное число элементов.

Постройте генератор от 10 с шагом минус три. Возьмите первые четыре значения и выведите список.

Семя 3, каждый следующий элемент - удвоение предыдущего. Возьмите первые пять значений и выведите список.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить