Что выведет код Middle Dart: классы и миксины обновлено
Dart: factory-конструктор с кешем
Вопрос
Что выведет программа? По строке на каждый вывод.
class Logger {
final String name;
static final _cache = <String, Logger>{};
factory Logger(String name) =>
_cache.putIfAbsent(name, () => Logger._(name));
Logger._(this.name) {
print('создан $name');
}
}
void main() {
final a = Logger('net');
final b = Logger('net');
final c = Logger('db');
print(identical(a, b));
print(identical(a, c));
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: создан net, создан db, true, false. factory возвращает объект из кеша, если он там есть.
Что выведет
создан net
создан db
true
false
Разбор
factory возвращает объект из кеша, если он там есть. Приватный конструктор Logger._ вызывается только при промахе: для net один раз и для db один раз. a и b один и тот же объект.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Dart: расширение и статический тип
Следующий вопрос
Dart: порядок инициализации при наследовании