Что выведет код Middle Dart: типы и null-safety обновлено
Dart: ленивость late final
Вопрос
Что выведет программа? По строке на каждый вывод.
int calls = 0;
int heavy() {
calls++;
print('считаю');
return 42;
}
late final int value = heavy();
void main() {
print('старт');
print(value);
print(value);
print(calls);
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: старт, считаю, 42, 42, 1. late с инициализатором вычисляется при первом чтении, а не при объявлении, поэтому считаю после старт.
Что выведет
старт
считаю
42
42
1
Разбор
late с инициализатором вычисляется при первом чтении, а не при объявлении, поэтому считаю после старт. Второе чтение берёт сохранённое значение: heavy вызвана один раз. Кстати, глобальные переменные верхнего уровня в Dart ленивы и без late.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.