Выбор ответа 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.

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

  1. true true
  2. false false
  3. false true
  4. true falseправильный ответ

Разбор

Одинаковые const-выражения канонизируются: компилятор создаёт один экземпляр, поэтому identical(a, b) даёт true. Литералы без const создают новые списки при каждом вычислении, и identical даёт false. Именно поэтому const-виджеты во Flutter экономят перестроения: фреймворк видит тот же самый экземпляр.

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

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