Выбор ответа Junior Dart: типы и null-safety спрашивают часто обновлено

Dart: чем final отличается от const

Вопрос

Что верно про final и const в Dart?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: final запрещает переприсвоить переменную, а const требует значение, известное при компиляции. final про переменную: присвоить можно один раз, но сам объект может меняться (final list = [1]; list.add(2); работает). const про значение: оно вычисляется при компиляции, неизменяемо целиком и канонизируется.

Варианты ответа

  1. final и const синонимы: оба фиксируют значение, const просто короче писать
  2. final запрещает переприсвоить переменную, а const требует значение, известное при компиляцииправильный ответ
  3. final делает объект глубоко неизменяемым, а const запрещает только переприсваивание
  4. const можно присвоить результат DateTime.now(), если сделать это ровно один раз

Разбор

final про переменную: присвоить можно один раз, но сам объект может меняться (final list = [1]; list.add(2); работает). const про значение: оно вычисляется при компиляции, неизменяемо целиком и канонизируется. DateTime.now() известен только в рантайме, поэтому для const не подходит, а для final подходит. Утверждение про «глубокую неизменяемость final» переворачивает смысл.

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

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