Что выведет код 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 ошибок.