РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
29 of 723 menu

Модификатор sync*

Модификатор sync* ставится после списка параметров функции и превращает её в синхронный генератор. Такая функция возвращает объект типа Iterable, а не обычное значение. Внутри неё можно использовать оператор yield, который отдаёт очередное значение генератора. Значения вычисляются лениво: код функции выполняется только тогда, когда потребитель запрашивает следующий элемент. Это удобно для создания последовательностей, которые не нужно хранить в памяти целиком.

Синтаксис

Iterable<T> functionName(parameters) sync* { yield value; }

Пример

Давайте создадим синхронный генератор, который поочерёдно отдаёт числа от 1 до 5:

Iterable<int> numbers() sync* { yield 1; yield 2; yield 3; yield 4; yield 5; } void main() { for (int num in numbers()) { print(num); } }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте создадим синхронный генератор, который принимает строку и отдаёт её символы по одному:

Iterable<String> chars(String str) sync* { for (int i = 0; i < str.length; i++) { yield str[i]; } } void main() { for (String ch in chars('abcde')) { print(ch); } }

Результат выполнения кода:

"a" "b" "c" "d" "e"

Пример

Давайте соберём все значения синхронного генератора в список с помощью метода toList:

Iterable<int> numbers() sync* { yield 1; yield 2; yield 3; } void main() { List<int> res = numbers().toList(); print(res); }

Результат выполнения кода:

[1, 2, 3]

Смотрите также

  • модификатор async*,
    который создаёт асинхронный генератор
  • модификатор yield,
    который отдаёт значение из генератора
  • модификатор yield*,
    который делегирует значения другому генератору
  • модификатор async,
    который делает функцию асинхронной
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить