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

Оператор yield*

Оператор yield* используется внутри функции-генератора и делегирует выдачу значений другому генератору. В отличие от обычного yield, который выдаёт одно значение, yield* передаёт управление целому генератору (например, другой функции с sync* или async*), и все значения из него попадают в итоговую последовательность. Оператор не принимает параметров, а справа от него указывается выражение, возвращающее Iterable или Stream.

Синтаксис

yield* iterable;

Пример

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

Iterable<int> inner() sync* { yield 1; yield 2; yield 3; } Iterable<int> outer() sync* { yield 0; yield* inner(); yield 4; } void main() { print(outer().toList()); }

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

[0, 1, 2, 3, 4]

Пример

Давайте делегируем генерацию прямо из списка, не создавая отдельную функцию:

Iterable<String> gen() sync* { yield 'abcde'; yield* ['12345', 'hello']; yield 'world'; } void main() { print(gen().toList()); }

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

["abcde", "12345", "hello", "world"]

Пример

Давайте применим yield* в асинхронном генераторе:

Stream<int> inner() async* { yield 1; yield 2; } Stream<int> outer() async* { yield* inner(); yield 3; } void main() async { await for (int value in outer()) { print(value); } }

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

1 2 3

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

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