💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 4 из 20
В контракте темы «val и var» что следует оставить в проектном решении после этого изменения контекста?
Опираться на семантику «Scala не выполняет неявное сужение из `Long` в `Int`: разработчик должен явно выбрать преобразование и принять ответственность за диапазон», но отдельно проверять ограничение «побочный эффект в последней строке может случайно сделать результатом `Unit`, хотя вызывающий код ожидает вычисленное значение».
Опираться на семантику «`val` запрещает повторное присваивание имени, а `var` допускает его; изменяемость самого объекта определяется его типом и методами», но отдельно проверять ограничение «считать `val` глубокой неизменяемостью опасно: коллекция или объект под неизменяемой ссылкой всё ещё может менять внутреннее состояние».
Опираться на семантику «в Scala блок, `if` и многие управляющие конструкции являются выражениями: результатом блока становится значение последней строки», но отдельно проверять ограничение «считать `val` глубокой неизменяемостью опасно: коллекция или объект под неизменяемой ссылкой всё ещё может менять внутреннее состояние».
Опираться на семантику «`val` запрещает повторное присваивание имени, а `var` допускает его; изменяемость самого объекта определяется его типом и методами», но отдельно проверять ограничение «если ветви выражения возвращают несвязанные типы, результат может стать слишком общим, и ошибка проявится далеко от места выбора».
Опираться на семантику «`val` запрещает повторное присваивание имени, а `var` допускает его; изменяемость самого объекта определяется его типом и методами», но отдельно проверять ограничение «прохождение happy path исключает ошибки сериализации на старых и неполных данных».
Вопрос 7 из 20
Для темы «Базовые типы» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
Scala Базовые типы: изменившийся контекст Копировать
// Дополнительный контекст: Фрагмент вынесли из локальной функции в общий модуль и добавили новый вариант входных данных.
val total: Long = Int.MaxValue.toLong + 10
val clipped = total.toInt
println(total -> clipped)
Одного обычного запуска недостаточно, поскольку добавление широкого типа или общего `case _` усиливает контроль, потому что компилятору становится известно больше допустимых вариантов.
Одного обычного запуска недостаточно, поскольку если ветви выражения возвращают несвязанные типы, результат может стать слишком общим, и ошибка проявится далеко от места выбора.
Одного обычного запуска недостаточно, поскольку риск возникает только при `var`; `val`, `case class` и неизменяемая коллекция полностью исключают скрытое состояние и ошибочный контракт.
Одного обычного запуска недостаточно, поскольку считать `val` глубокой неизменяемостью опасно: коллекция или объект под неизменяемой ссылкой всё ещё может менять внутреннее состояние.
Одного обычного запуска недостаточно, поскольку автоматическое сужение могло бы молча потерять старшие биты, поэтому ожидание «компилятор сам разберётся» приводит к ошибке сборки или неверному преобразованию.