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