💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 14 из 20
В контракте темы «Условия-ограничители» какая формулировка учитывает и семантику конструкции, и реальный риск?
Опираться на семантику «guard после шаблона уточняет уже сопоставленное значение; при ложном guard поиск продолжается со следующего `case`», но отдельно проверять ограничение «guard с побочным эффектом или дорогим вычислением усложняет порядок проверки и может выполняться чаще, чем кажется».
Опираться на семантику «`match` проверяет варианты сверху вниз и выбирает первый подходящий `case`; более общий шаблон может сделать нижние варианты недостижимыми», но отдельно проверять ограничение «широкий `case _` подавляет полезную проверку при добавлении нового состояния и превращает изменение модели в скрытый дефект».
Опираться на семантику «guard после шаблона уточняет уже сопоставленное значение; при ложном guard поиск продолжается со следующего `case`», но отдельно проверять ограничение «если основной сценарий прошёл, отрицательные и конкурентные случаи можно не проверять».
Опираться на семантику «guard после шаблона уточняет уже сопоставленное значение; при ложном guard поиск продолжается со следующего `case`», но отдельно проверять ограничение «отсутствующая ветвь `else` даёт `Unit` в ложном случае и часто расширяет итоговый тип до неожиданного объединения».
Опираться на семантику «`if` возвращает значение, поэтому обе ветви должны образовать общий тип, пригодный для дальнейшего использования», но отдельно проверять ограничение «guard с побочным эффектом или дорогим вычислением усложняет порядок проверки и может выполняться чаще, чем кажется».
Вопрос 17 из 20
После рефакторинга код по-прежнему компилируется, однако его статический тип стал шире. Какое ограничение темы «Исчерпывающий разбор» становится существенным?
Одного обычного запуска недостаточно, поскольку локальное изменение сигнатуры не способно повлиять на поиск перегрузки, given или вывод типа в вызывающем коде.
Одного обычного запуска недостаточно, поскольку ранний шаблон `_` или широкий тип перехватывает данные, которые разработчик рассчитывал обработать специализированным случаем.
Одного обычного запуска недостаточно, поскольку широкий `case _` подавляет полезную проверку при добавлении нового состояния и превращает изменение модели в скрытый дефект.
Одного обычного запуска недостаточно, поскольку guard с побочным эффектом или дорогим вычислением усложняет порядок проверки и может выполняться чаще, чем кажется.
Одного обычного запуска недостаточно, поскольку добавление широкого типа или общего `case _` усиливает контроль, потому что компилятору становится известно больше допустимых вариантов.