Что выведет код Junior Dart: типы и null-safety обновлено

Dart: final-список можно менять

Вопрос

Что выведет программа? По строке на каждый вывод.

void main() {
  final list = [1, 2];
  list.add(3);
  print(list);
  final fixed = List.unmodifiable(list);
  try {
    fixed.add(4);
  } on UnsupportedError {
    print('нельзя');
  }
  list.add(4);
  print(fixed.length);
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: [1, 2, 3], нельзя, 3. final запрещает переприсвоить переменную, но не менять объект, поэтому add работает.

Что выведет

[1, 2, 3]
нельзя
3

Разбор

final запрещает переприсвоить переменную, но не менять объект, поэтому add работает. List.unmodifiable создаёт неизменяемую копию: add бросает UnsupportedError. Это копия, поэтому последующий add в исходный список её не меняет, длина остаётся 3.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.