Что выведет код 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 ошибок.

Термины по теме