💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 3 из 20
Что здесь следует считать правилом «Коллекции», а что — лишь деталью текущей реализации?
Dart Dart · Коллекции · семантика Копировать
void main() {
final tags = <String>{'dart', 'flutter', 'dart'};
final lengths = <String, int>{for (final t in tags) t: t.length};
print('${tags.length}:${lengths['flutter']}');
}
// Контекст задания: проверка семантики фрагмента.
Случай «обращение по отсутствующему индексу или ключу» объявить внутренней деталью «Коллекции», даже если клиент видит иной результат.
`List` сохраняет порядок и допускает повторы, `Set` хранит уникальные элементы, `Map` связывает уникальные ключи со значениями; выбор структуры должен следовать требуемым операциям.
Порядок внутренних вызовов «Коллекции» считать публичной гарантией, которую нельзя менять при рефакторинге. Предполагается, что компиляция уже подтверждает весь договор «Коллекции».
Спорный результат «Коллекции» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Дополнительные границы «Коллекции» при таком рассуждении считают избыточными.
Для «Коллекции» считать случаи «повторяющиеся элементы, одинаковые ключи, порядок обхода и обращение по отсутствующему индексу или ключу» эквивалентными, если программа не завершается аварийно.
Вопрос 6 из 20
На ревью спорят, достаточно ли одного сквозного теста для «Spread-оператор». Какой набор действительно раскрывает границы поведения?
Dart Dart · Spread-оператор · границы Копировать
void main() {
List<int>? extra = [3, 4];
final values = <int>[1, 2, ...?extra, 5];
extra[0] = 99;
print(values);
}
// Контекст задания: анализ граничных входов.
Составить отдельные сценарии для границ: пустой источник, nullable-коллекция для `...?` и вложенная коллекция, изменённая после разворачивания.
Автоматизировать обычный путь «Spread-оператор», а случай «изменённая после разворачивания» оставить в ручном чек-листе выпуска.
Проверить для «Spread-оператор» только самый сложный случай «изменённая после разворачивания», считая остальные границы косвенно покрытыми.
Во всех спорных входах «Spread-оператор» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Объединить «пустой источник» и «nullable-коллекция для `...?` и вложенная коллекция» в один тест «Spread-оператор» с общим ожидаемым исходом.
Вопрос 7 из 20
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Spread-оператор»?
Dart Dart · Spread-оператор · семантика Копировать
void main() {
List<int>? extra = [3, 4];
final values = <int>[1, 2, ...?extra, 5];
extra[0] = 99;
print(values);
}
// Контекст задания: проверка семантики фрагмента.
Для «Spread-оператор» считать случаи «пустой источник, nullable-коллекция для `...?` и вложенная коллекция, изменённая после разворачивания» эквивалентными, если программа не завершается аварийно.
Порядок внутренних вызовов «Spread-оператор» считать публичной гарантией, которую нельзя менять при рефакторинге. Предполагается, что компиляция уже подтверждает весь договор «Spread-оператор».
Спорный результат «Spread-оператор» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Дополнительные границы «Spread-оператор» при таком рассуждении считают избыточными.
Случай «изменённая после разворачивания» объявить внутренней деталью «Spread-оператор», даже если клиент видит иной результат. Вывод делают по поведению текущей реализации «Spread-оператор» на обычном входе.
`...` разворачивает итерируемое значение, а `...?` дополнительно допускает null; разворачивание создаёт элементы новой коллекции, но не делает глубоких копий вложенных объектов.
Вопрос 8 из 20
Какое изменение показанного кода исправляет правило «Spread-оператор», а не маскирует один его симптом?
Dart Dart · Spread-оператор · исправление Копировать
void main() {
List<int>? extra = [3, 4];
final values = <int>[1, 2, ...?extra, 5];
extra[0] = 99;
print(values);
}
// Контекст задания: выбор места исправления.
Использовать `...` только для ненулевого источника, `...?` — для допустимого `null`, отдельно решая вопрос глубокой копии.
В решении «Spread-оператор» перехватывать любое исключение и возвращать нейтральное значение без указания причины.
Ослабить правило «Spread-оператор» для случая «изменённая после разворачивания», чтобы спорный вход проходил как допустимый.
Добавить обработку «пустой источник» в ближайший вызывающий метод, не меняя общий компонент «Spread-оператор».
Добавить в «Spread-оператор» специальный флаг только для одного экрана или сервиса, сохранив общий контракт.
Вопрос 11 из 20
Что в поведении этого кода гарантировано правилами темы «Условия и циклы внутри коллекций», а не случайно совпало в одном запуске?
Dart Dart · Условия и циклы внутри коллекций · семантика Копировать
List<String> menu(bool admin, List<String> projects) => <String>[
'home',
if (admin) 'settings',
for (final p in projects) 'project:$p',
];
void main() => print(menu(false, ['a', 'b']));
// Контекст задания: проверка семантики фрагмента.
Спорный результат «Условия и циклы внутри коллекций» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Collection `if` и `for` формируют коллекцию декларативно; условие управляет наличием элемента, а не фильтрует уже созданный список задним числом.
Случай «порядок вложенных обходов» объявить внутренней деталью «Условия и циклы внутри коллекций», даже если клиент видит иной результат.
Порядок внутренних вызовов «Условия и циклы внутри коллекций» считать публичной гарантией, которую нельзя менять при рефакторинге.
В теме «Условия и циклы внутри коллекций» отсутствие предупреждения анализатора считать гарантией для любого допустимого входа.
Вопрос 13 из 20
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Условия и циклы внутри коллекций» нельзя проверять одним общим ожиданием?
Dart Dart · Условия и циклы внутри коллекций · границы Копировать
List<String> menu(bool admin, List<String> projects) => <String>[
'home',
if (admin) 'settings',
for (final p in projects) 'project:$p',
];
void main() => print(menu(false, ['a', 'b']));
// Контекст задания: анализ граничных входов.
Во всех спорных входах «Условия и циклы внутри коллекций» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Для «Условия и циклы внутри коллекций» ограничиться случаем «ложное условие collection `if`», а остальные входы считать тем же классом отказа.
Автоматизировать обычный путь «Условия и циклы внутри коллекций», а случай «порядок вложенных обходов» оставить в ручном чек-листе выпуска.
Проверить входы «Условия и циклы внутри коллекций» только на текущей реализации, не закрепляя результат как внешний договор.
Задать самостоятельные ожидания для случаев: ложное условие collection `if`, пустой цикл collection `for` и порядок вложенных обходов.