Выбор ответа Middle Dart: типы и null-safety обновлено
Dart: канонизация const-объектов
Вопрос
Что выведет код?
const a = [1, 2];
const b = [1, 2];
final c = [1, 2];
final d = [1, 2];
print('${identical(a, b)} ${identical(c, d)}');
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: true false. Одинаковые const-выражения канонизируются: компилятор создаёт один экземпляр, поэтому identical(a, b) даёт true.
Варианты ответа
true truefalse falsefalse truetrue falseправильный ответ
Разбор
Одинаковые const-выражения канонизируются: компилятор создаёт один экземпляр, поэтому identical(a, b) даёт true. Литералы без const создают новые списки при каждом вычислении, и identical даёт false. Именно поэтому const-виджеты во Flutter экономят перестроения: фреймворк видит тот же самый экземпляр.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Dart: типы и null-safety»
- Dart: почему не сужается тип публичного поля
- Dart: чем final отличается от const
- collection if и for
- Зачем нужен late
- Операторы null-safety в Dart
- Dart: когда выполняется map у Iterable
- Dart: чтение late-переменной до присвоения
- Объявления переменных в Dart