PHP PHP  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Генераторы и ленивые последовательности

Генератор полезен не потому, что выглядит короче цикла, а потому что меняет момент вычисления и хранения данных. Задания требуют проследить однократный обход, делегирование, возврат значения и поведение при исключении.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Отмечайте, когда именно выполняется строка кода и сохраняется ли вся последовательность. На тест дано 70 минут.
Вопрос 1 из 25
Что возвращает вызов функции с yield?
PHP
function numbers(): Generator
{
    yield 1;
    yield 2;
}
$sequence = numbers();
var_dump($sequence::class);
Вопрос 2 из 25
Что выведется до начала foreach?
PHP
function seq(){echo 'A';yield 1;echo 'B';yield 2;}
echo 'start'; $g=seq();
Вопрос 3 из 25
Что произойдёт после первого next()?
PHP
function steps(): Generator
{
    yield 'first';
    echo 'between';
    yield 'second';
}
$generator = steps();
$generator->current();
$generator->next();
Вопрос 4 из 25
Какой результат foreach?
PHP
function nums(){yield 1;yield 2;}
foreach(nums() as $n) echo $n;
Вопрос 5 из 25
Когда return внутри генератора выполняется?
Вопрос 6 из 25
Что выдаёт yield 10 => "x"?
PHP
function item(): Generator
{
    yield 10 => 'x';
}
foreach (item() as $key => $value) {
    echo "$key:$value";
}
Вопрос 7 из 25
Что напечатает код?
PHP
function pairs(){yield 'a'=>1;yield 'b'=>2;}
foreach(pairs() as $k=>$v) echo "$k:$v ";
Вопрос 8 из 25
Что случится с повторяющимися ключами при iterator_to_array($g, true)?
PHP
function values(): Generator
{
    yield 'id' => 10;
    yield 'id' => 20;
}
$result = iterator_to_array(values(), true);
Вопрос 9 из 25
Как заставить iterator_to_array переиндексировать значения?
Вопрос 10 из 25
Как нумеровать строки файла с единицы?
Вопрос 11 из 25
Что делает yield from $iterable?
PHP
function allItems(iterable $source): Generator
{
    yield 'before';
    yield from $source;
    yield 'after';
}
Вопрос 12 из 25
Какой вывод?
PHP
function inner(){yield 2;yield 3;}
function outer(){yield 1;yield from inner();}
foreach(outer() as $v) echo $v;
Вопрос 13 из 25
Попадает ли return вложенного генератора в foreach как элемент?
PHP
function inner(): Generator
{
    yield 'row';
    return 42;
}
function outer(): Generator
{
    $result = yield from inner();
    echo $result;
}
Вопрос 14 из 25
Что окажется в $count?
PHP
function inner(){yield 'a';yield 'b';return 2;}
function outer(){ $count=yield from inner(); return $count; }
$g=outer(); foreach($g as $_){}; echo $g->getReturn();
Вопрос 15 из 25
Когда yield from массива не даёт выигрыша по памяти?
Вопрос 16 из 25
Почему генератор диапазона экономит память?
PHP
function rangeLazy(int $from, int $to): Generator
{
    for ($number = $from; $number <= $to; $number++) {
        yield $number;
    }
}
Вопрос 17 из 25
Какая следующая строка немедленно материализует все значения генератора и тем самым возвращает зависимость памяти от размера входа?
PHP
$generator = readRows($stream);
Вопрос 18 из 25
Большой CSV обрабатывается построчно. Что лучше?
Вопрос 19 из 25
Почему замыкание внутри генератора может удерживать большой объект?
Вопрос 20 из 25
Когда массив предпочтительнее генератора?
Вопрос 21 из 25
Можно ли повторно обойти завершённый Generator?
PHP
$generator = numbers();
foreach ($generator as $number) {
    echo $number;
}
foreach ($generator as $number) {
    echo $number;
}
Вопрос 22 из 25
Когда выбрасывается исключение из тела генератора?
Вопрос 23 из 25
Как проверить первые два элемента бесконечного генератора?
Вопрос 24 из 25
Что означает valid()?
Вопрос 25 из 25
Как диагностировать остановку на конкретной строке входа?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу