💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 2 из 25
Какой тезис о коде «Локальное состояние» можно защитить без ссылки на удачный тестовый запуск?
Dart Dart · Локальное состояние · семантика Копировать
class _CounterState extends State<Counter> {
int value = 0;
void increment() => setState(() => value++);
@override
Widget build(BuildContext context) => TextButton(
onPressed: increment,
child: Text('$value'),
);
}
// Контекст задания: проверка семантики фрагмента.
Локальное состояние подходит для краткоживущей детали одного виджета — раскрытия, выбранной вкладки, текста до отправки; выносить его глобально без нужды усложняет поток данных.
Случай «обновление после `dispose`» объявить внутренней деталью «Локальное состояние», даже если клиент видит иной результат. Дополнительные границы «Локальное состояние» при таком рассуждении считают избыточными.
Для «Локальное состояние» считать случаи «состояние, нужное одному виджету, поздний результат старого запроса и обновление после `dispose`» эквивалентными, если программа не завершается аварийно.
Спорный результат «Локальное состояние» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Предполагается, что компиляция уже подтверждает весь договор «Локальное состояние».
Порядок внутренних вызовов «Локальное состояние» считать публичной гарантией, которую нельзя менять при рефакторинге. Клиенту «Локальное состояние» предлагают самостоятельно уточнять смысл спорного результата.
Вопрос 11 из 25
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Потоки состояния» нельзя проверять одним общим ожиданием?
Dart Dart · Потоки состояния · границы Копировать
Widget build(BuildContext context) {
return StreamBuilder<SessionState>(
stream: sessions.states,
initialData: const SessionState.loading(),
builder: (_, snapshot) => SessionView(state: snapshot.requireData),
);
}
// Контекст задания: анализ граничных входов.
Задать самостоятельные ожидания для случаев: первое значение, ошибка потока, поздний слушатель и закрытие источника состояния.
Во всех спорных входах «Потоки состояния» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Проверить для «Потоки состояния» только самый сложный случай «закрытие источника состояния», считая остальные границы косвенно покрытыми.
Для «Потоки состояния» ограничиться случаем «первое значение», а остальные входы считать тем же классом отказа.
Автоматизировать обычный путь «Потоки состояния», а случай «закрытие источника состояния» оставить в ручном чек-листе выпуска.
Вопрос 12 из 25
Какое описание семантики показанного решения по теме «Потоки состояния» является точным?
Dart Dart · Потоки состояния · семантика Копировать
Widget build(BuildContext context) {
return StreamBuilder<SessionState>(
stream: sessions.states,
initialData: const SessionState.loading(),
builder: (_, snapshot) => SessionView(state: snapshot.requireData),
);
}
// Контекст задания: проверка семантики фрагмента.
Поток состояния должен иметь определённое начальное значение, правила обработки ошибок и владельца подписки; два конкурирующих источника истины приводят к гонкам интерфейса.
Спорный результат «Потоки состояния» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Так внутренняя структура «Потоки состояния» фактически становится частью внешнего обещания.
Случай «закрытие источника состояния» объявить внутренней деталью «Потоки состояния», даже если клиент видит иной результат.
Для «Потоки состояния» считать случаи «первое значение, ошибка потока, поздний слушатель и закрытие источника состояния» эквивалентными, если программа не завершается аварийно.
Порядок внутренних вызовов «Потоки состояния» считать публичной гарантией, которую нельзя менять при рефакторинге. Различия между версиями SDK для «Потоки состояния» в этом выводе не учитываются.