Введение в ленивый перебор в Dart
Ленивый перебор в Dart похож на цепочку where и map
у списка, но шаги сначала только записываются. Обход
элементов начинается, когда появляется конечное действие -
команда, которой нужен готовый результат или явный проход
по элементам.
У списка и множества можно сразу вызвать where или
map: метод возвращает новый Iterable и сам
по себе не перебирает исходные данные. Промежуточные шаги
лишь описывают правила отбора и преобразования.
Пока вызван только отбор или преобразование, программа
запоминает цепочку. Сравнения и вычисления с элементами
произойдут внутри toList или при обходе в цикле,
когда понадобится собрать итог.
Переменная с такой цепочкой хранит описание шагов, а не
готовый список. Конечное действие может быть другим -
посчитать длину, взять первый элемент или сложить числа.
Отдельно элементы порождают функции с sync* и
yield, если исходной коллекции еще нет.