DT Dart  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Классы и конструкторы

Тест по теме «Классы и конструкторы» охватывает «Инициализаторы», «Именованные конструкторы», «Фабрики» и «Состояние объекта». В 20 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 12; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 20
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Инициализаторы»?
DartDart · Инициализаторы · исправление
class Range {
  Range(this.start, this.end) : assert(start <= end);
  final int start;
  final int end;
  int get length => end - start;
}
void main() => print(Range(2, 7).length);

// Контекст задания: выбор места исправления.
Вопрос 2 из 20
Какой вывод о фрагменте «Инициализаторы» останется верным после безопасного рефакторинга?
DartDart · Инициализаторы · семантика
class Range {
  Range(this.start, this.end) : assert(start <= end);
  final int start;
  final int end;
  int get length => end - start;
}
void main() => print(Range(2, 7).length);

// Контекст задания: проверка семантики фрагмента.
Вопрос 3 из 20
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Инициализаторы» нельзя проверять одним общим ожиданием?
DartDart · Инициализаторы · границы
class Range {
  Range(this.start, this.end) : assert(start <= end);
  final int start;
  final int end;
  int get length => end - start;
}
void main() => print(Range(2, 7).length);

// Контекст задания: анализ граничных входов.
Вопрос 4 из 20
Как проверить тему «Инициализаторы» через публичный результат, не цепляясь за устройство реализации?
Вопрос 5 из 20
Команда хочет свободно менять устройство решения «Инициализаторы». Какое требование нельзя нарушить?
Вопрос 6 из 20
Код проходит обычный сценарий. Какие проверки по теме «Именованные конструкторы» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Именованные конструкторы · границы
class Point {
  const Point(this.x, this.y);
  const Point.origin() : this(0, 0);
  final int x; final int y;
}
void main() => print(const Point.origin().x);

// Контекст задания: анализ граничных входов.
Вопрос 7 из 20
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Именованные конструкторы»?
DartDart · Именованные конструкторы · исправление
class Point {
  const Point(this.x, this.y);
  const Point.origin() : this(0, 0);
  final int x; final int y;
}
void main() => print(const Point.origin().x);

// Контекст задания: выбор места исправления.
Вопрос 8 из 20
Какой вывод о фрагменте «Именованные конструкторы» останется верным после безопасного рефакторинга?
DartDart · Именованные конструкторы · семантика
class Point {
  const Point(this.x, this.y);
  const Point.origin() : this(0, 0);
  final int x; final int y;
}
void main() => print(const Point.origin().x);

// Контекст задания: проверка семантики фрагмента.
Вопрос 9 из 20
Одна реализация темы «Именованные конструкторы» заменяется другой. Что внешний код вправе ожидать после замены?
Вопрос 10 из 20
Как проверить тему «Именованные конструкторы» через публичный результат, не цепляясь за устройство реализации?
Вопрос 11 из 20
Команда хочет сократить набор проверок для «Фабрики» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Фабрики · границы
class User {
  User._(this.id);
  static final _cache = <int, User>{};
  factory User(int id) => _cache.putIfAbsent(id, () => User._(id));
  final int id;
}
void main() => print(identical(User(1), User(1)));

// Контекст задания: анализ граничных входов.
Вопрос 12 из 20
Какое утверждение о показанном фрагменте и теме «Фабрики» опирается на реальную гарантию Dart или используемого интерфейса?
DartDart · Фабрики · семантика
class User {
  User._(this.id);
  static final _cache = <int, User>{};
  factory User(int id) => _cache.putIfAbsent(id, () => User._(id));
  final int id;
}
void main() => print(identical(User(1), User(1)));

// Контекст задания: проверка семантики фрагмента.
Вопрос 13 из 20
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Фабрики»?
DartDart · Фабрики · исправление
class User {
  User._(this.id);
  static final _cache = <int, User>{};
  factory User(int id) => _cache.putIfAbsent(id, () => User._(id));
  final int id;
}
void main() => print(identical(User(1), User(1)));

// Контекст задания: выбор места исправления.
Вопрос 14 из 20
Какой тест действительно поймает возврат дефекта в теме «Фабрики»?
Вопрос 15 из 20
Одна реализация темы «Фабрики» заменяется другой. Что внешний код вправе ожидать после замены?
Вопрос 16 из 20
Какой тезис о коде «Состояние объекта» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Состояние объекта · семантика
class Account {
  Account(int cents) : _cents = cents {
    if (cents < 0) throw ArgumentError.value(cents);
  }
  int _cents;
  int get cents => _cents;
  void debit(int value) {
    if (value < 0 || value > _cents) throw StateError('balance');
    _cents -= value;
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 17 из 20
Какой вариант правки убирает источник дефекта «Состояние объекта» и не заставляет клиентов дублировать защиту?
DartDart · Состояние объекта · исправление
class Account {
  Account(int cents) : _cents = cents {
    if (cents < 0) throw ArgumentError.value(cents);
  }
  int _cents;
  int get cents => _cents;
  void debit(int value) {
    if (value < 0 || value > _cents) throw StateError('balance');
    _cents -= value;
  }
}

// Контекст задания: выбор места исправления.
Вопрос 18 из 20
Код проходит обычный сценарий. Какие проверки по теме «Состояние объекта» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Состояние объекта · границы
class Account {
  Account(int cents) : _cents = cents {
    if (cents < 0) throw ArgumentError.value(cents);
  }
  int _cents;
  int get cents => _cents;
  void debit(int value) {
    if (value < 0 || value > _cents) throw StateError('balance');
    _cents -= value;
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 19 из 20
Внутреннее устройство решения «Состояние объекта» меняется. Какой внешний договор обязан сохраниться?
Вопрос 20 из 20
Какой тест действительно поймает возврат дефекта в теме «Состояние объекта»?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу