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