💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 3 из 20
При исправлении темы «Параметры типов» какая правка сохраняет полезную семантику и не расширяет обещания API?
Scala Параметры типов: решение на ревью Копировать
def first[A](xs: List[A]): Option[A] = xs.headOption
println(first(List(1,2,3)))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Сделать все ограничения типов максимально широкими, чтобы компилятор реже отклонял вызовы, а проверку перенести на время выполнения.
Формулируйте минимальную границу, которая действительно нужна алгоритму, и проверяйте вывод типа на смешанных подтипах.
Использовать match type вместо небольшой предметной модели даже там, где ошибка может быть яснее проверена обычным `enum`.
Используйте контравариантность для потребителей, сравнителей, сериализаторов входа и обработчиков событий.
Передавайте `ClassTag`, `TypeTest` или явный декодер только там, где операция действительно зависит от типа во время выполнения.
Вопрос 4 из 20
В контракте темы «Параметры типов» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Опираться на семантику «контравариантность `Consumer[-A]` позволяет обработчику общего типа служить там, где нужен обработчик более конкретного типа», но отдельно проверять ограничение «стирание типов на JVM не позволяет в общем случае проверить `A` через обычный `isInstanceOf[A]` без дополнительной информации».
Опираться на семантику «параметр типа связывает операции с типом данных и позволяет компилятору проверять согласованность без приведений», но отдельно проверять ограничение «одного примера достаточно, чтобы подтвердить законы абстракции и отсутствие побочных эффектов».
Опираться на семантику «верхняя граница `A <: Base` требует подтип, нижняя `A >: Child` позволяет безопасно расширить результат до общего супертипа», но отдельно проверять ограничение «метод, принимающий `A`, нарушил бы безопасность: через ссылку `Box[Animal]` можно было бы положить собаку в коробку кошек».
Опираться на семантику «параметр типа связывает операции с типом данных и позволяет компилятору проверять согласованность без приведений», но отдельно проверять ограничение «пытаться возвращать `A` из контравариантного типа небезопасно: общий обработчик не обязан уметь создать конкретный подтип».
Опираться на семантику «параметр типа связывает операции с типом данных и позволяет компилятору проверять согласованность без приведений», но отдельно проверять ограничение «стирание типов на JVM не позволяет в общем случае проверить `A` через обычный `isInstanceOf[A]` без дополнительной информации».
Вопрос 10 из 20
При проверке темы «Ковариантность» что поможет соседнему модулю не повторить ту же ошибку?
Для добавления используйте нижнюю границу и возвращайте расширенный новый контейнер, не изменяя исходный. В проверке воспроизвести ситуацию: пытаться возвращать `A` из контравариантного типа небезопасно: общий обработчик не обязан уметь создать конкретный подтип.
Ковариантность `Box[+A]` разрешает использовать `Box[Cat]` как `Box[Animal]`, если тип `A` только производится наружу. Проверить локальный успех, не моделируя частичный отказ внешнего сервиса.
Для добавления используйте нижнюю границу и возвращайте расширенный новый контейнер, не изменяя исходный. В проверке воспроизвести ситуацию: метод, принимающий `A`, нарушил бы безопасность: через ссылку `Box[Animal]` можно было бы положить собаку в коробку кошек.
В теме «Ковариантность» исправить один показанный вызов по рекомендации «Формулируйте минимальную границу, которая действительно нужна алгоритму, и проверяйте вывод типа на смешанных подтипах». Общий контракт и прежнюю границу отдельно не воспроизводить.
Используйте контравариантность для потребителей, сравнителей, сериализаторов входа и обработчиков событий. В проверке воспроизвести ситуацию: метод, принимающий `A`, нарушил бы безопасность: через ссылку `Box[Animal]` можно было бы положить собаку в коробку кошек.
Вопрос 15 из 20
При проверке темы «Контравариантность» какой контроль остаётся полезным после рефакторинга и переименования кода?
В теме «Контравариантность» исправить один показанный вызов по рекомендации «Формулируйте минимальную границу, которая действительно нужна алгоритму, и проверяйте вывод типа на смешанных подтипах». Общий контракт и прежнюю границу отдельно не воспроизводить.
Для добавления используйте нижнюю границу и возвращайте расширенный новый контейнер, не изменяя исходный. В проверке воспроизвести ситуацию: пытаться возвращать `A` из контравариантного типа небезопасно: общий обработчик не обязан уметь создать конкретный подтип.
Используйте контравариантность для потребителей, сравнителей, сериализаторов входа и обработчиков событий. В проверке воспроизвести ситуацию: пытаться возвращать `A` из контравариантного типа небезопасно: общий обработчик не обязан уметь создать конкретный подтип.
Контравариантность `Consumer[-A]` позволяет обработчику общего типа служить там, где нужен обработчик более конкретного типа. После правки ограничиться исходным примером без пограничного входа.
Используйте контравариантность для потребителей, сравнителей, сериализаторов входа и обработчиков событий. В проверке воспроизвести ситуацию: метод, принимающий `A`, нарушил бы безопасность: через ссылку `Box[Animal]` можно было бы положить собаку в коробку кошек.