SC Scala  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Обобщения и variance

Раздел «Обобщения и variance» соединяет небольшие фрагменты Scala с ревью и рабочими сценариями. Проверяются: Параметры типов, Ковариантность, Контравариантность, Границы типов.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 20
Какой вывод о теме «Параметры типов» можно сделать без дополнительных допущений?
ScalaПараметры типов: чтение фрагмента
def first[A](xs: List[A]): Option[A] = xs.headOption
println(first(List(1,2,3)))
Вопрос 2 из 20
Для темы «Параметры типов» какое последствие нельзя исключить одним успешным запуском?
ScalaПараметры типов: изменившийся контекст
// Дополнительный контекст: Библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений.
def first[A](xs: List[A]): Option[A] = xs.headOption
println(first(List(1,2,3)))
Вопрос 3 из 20
При исправлении темы «Параметры типов» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaПараметры типов: решение на ревью
def first[A](xs: List[A]): Option[A] = xs.headOption
println(first(List(1,2,3)))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 20
В контракте темы «Параметры типов» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 5 из 20
При проверке темы «Параметры типов» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 6 из 20
В теме «Ковариантность» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaКовариантность: чтение фрагмента
sealed trait Animal
case class Cat(name: String) extends Animal
class Box[+A](val value: A)
val animals: Box[Animal] = Box(Cat("M"))
println(animals.value)
Вопрос 7 из 20
Для темы «Ковариантность» какой пограничный случай относится к контракту, а не только к стилю записи?
ScalaКовариантность: изменившийся контекст
// Дополнительный контекст: Обобщённую сигнатуру опубликовали в API, после чего появился ещё один допустимый экземпляр типа.
sealed trait Animal
case class Cat(name: String) extends Animal
class Box[+A](val value: A)
val animals: Box[Animal] = Box(Cat("M"))
println(animals.value)
Вопрос 8 из 20
При исправлении темы «Ковариантность» что здесь лучше исправить до объединения изменений?
ScalaКовариантность: решение на ревью
sealed trait Animal
case class Cat(name: String) extends Animal
class Box[+A](val value: A)
val animals: Box[Animal] = Box(Cat("M"))
println(animals.value)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 20
В контракте темы «Ковариантность» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 10 из 20
При проверке темы «Ковариантность» что поможет соседнему модулю не повторить ту же ошибку?
Вопрос 11 из 20
В теме «Контравариантность» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
ScalaКонтравариантность: чтение фрагмента
trait Show[-A]: def render(a: A): String
val anyShow: Show[Any] = (a: Any) => a.toString
val stringShow: Show[String] = anyShow
println(stringShow.render("ok"))
Вопрос 12 из 20
Для темы «Контравариантность» типовую конструкцию перенесли в другой модуль, где набор импортов и область поиска `given` отличаются. Какой дефект остаётся возможным при корректном синтаксисе?
Вопрос 13 из 20
При исправлении темы «Контравариантность» на ревью уже воспроизвели проблему: Пытаться возвращать `A` из контравариантного типа небезопасно: общий обработчик не обязан уметь создать конкретный подтип. Какую правку стоит принять?
ScalaКонтравариантность: решение на ревью
trait Show[-A]: def render(a: A): String
val anyShow: Show[Any] = (a: Any) => a.toString
val stringShow: Show[String] = anyShow
println(stringShow.render("ok"))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 20
В контракте темы «Контравариантность» какое решение не превращает частный успешный случай в общее обещание?
Вопрос 15 из 20
При проверке темы «Контравариантность» какой контроль остаётся полезным после рефакторинга и переименования кода?
Вопрос 16 из 20
Какая характеристика конструкции «Границы типов» подтверждается показанным фрагментом?
ScalaГраницы типов: чтение фрагмента
def names[A <: Product](xs: List[A]) = xs.map(_.productPrefix)
println(names(List(Some(1), None)))
Вопрос 17 из 20
Для темы «Границы типов» что здесь требует отдельного теста или компиляционного примера?
Вопрос 18 из 20
При исправлении темы «Границы типов» нужно устранить причину, а не замаскировать симптом. Какое изменение подходит лучше?
ScalaГраницы типов: решение на ревью
def names[A <: Product](xs: List[A]) = xs.map(_.productPrefix)
println(names(List(Some(1), None)))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 20
В контракте темы «Границы типов» после изменения окружения команда пересматривает контракт. Какой вариант корректен?
Вопрос 20 из 20
При проверке темы «Границы типов» какая проверка связывает принятую правку с реальной границей решения?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу