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

Traits и композиция поведения

Раздел «Traits и композиция поведения» соединяет небольшие фрагменты Scala с ревью и рабочими сценариями. Проверяются: Примеси `trait`, Подмешивание поведения, Линеаризация, Самотипы.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 20
Во фрагменте проверяется тема «Примеси `trait`». Какое правило точнее всего объясняет поведение кода?
ScalaПримеси `trait`: чтение фрагмента
trait Named:
  def name: String
  def greeting = s"Hello, $name"
class User(val name: String) extends Named
println(User("Ada").greeting)
Вопрос 2 из 20
Для темы «Примеси `trait`» на какой границе это решение перестаёт быть достаточным?
ScalaПримеси `trait`: изменившийся контекст
// Дополнительный контекст: Публичную сигнатуру слегка изменили, но большая часть вызывающего кода осталась прежней.
trait Named:
  def name: String
  def greeting = s"Hello, $name"
class User(val name: String) extends Named
println(User("Ada").greeting)
Вопрос 3 из 20
При исправлении темы «Примеси `trait`» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaПримеси `trait`: решение на ревью
trait Named:
  def name: String
  def greeting = s"Hello, $name"
class User(val name: String) extends Named
println(User("Ada").greeting)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 20
В контракте темы «Примеси `trait`» что следует оставить в проектном решении после этого изменения контекста?
Вопрос 5 из 20
При проверке темы «Примеси `trait`» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 6 из 20
В теме «Подмешивание поведения» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaПодмешивание поведения: чтение фрагмента
trait A: def label = "A"
trait B: def label = "B"
class C extends A, B:
  override def label = super[A].label + super[B].label
println(C().label)
Вопрос 7 из 20
Для темы «Подмешивание поведения» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaПодмешивание поведения: изменившийся контекст
// Дополнительный контекст: После рефакторинга код по-прежнему компилируется, однако его статический тип стал шире.
trait A: def label = "A"
trait B: def label = "B"
class C extends A, B:
  override def label = super[A].label + super[B].label
println(C().label)
Вопрос 8 из 20
Как следует завершить ревью темы «Подмешивание поведения»?
ScalaПодмешивание поведения: решение на ревью
trait A: def label = "A"
trait B: def label = "B"
class C extends A, B:
  override def label = super[A].label + super[B].label
println(C().label)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 20
В контракте темы «Подмешивание поведения» публичную сигнатуру слегка изменили, но большая часть вызывающего кода осталась прежней. Какой вывод одновременно сохраняет правило и учитывает его границу?
Вопрос 10 из 20
При проверке темы «Подмешивание поведения» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?
Вопрос 11 из 20
Какой вывод о теме «Линеаризация» можно сделать без дополнительных допущений?
ScalaЛинеаризация: чтение фрагмента
trait Base: def run = List("base")
trait A extends Base: abstract override def run = "A" :: super.run
trait B extends Base: abstract override def run = "B" :: super.run
class App extends Base, A, B
println(App().run.mkString("->"))
Вопрос 12 из 20
Для темы «Линеаризация» какое последствие нельзя исключить одним успешным запуском?
Вопрос 13 из 20
При исправлении темы «Линеаризация» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaЛинеаризация: решение на ревью
trait Base: def run = List("base")
trait A extends Base: abstract override def run = "A" :: super.run
trait B extends Base: abstract override def run = "B" :: super.run
class App extends Base, A, B
println(App().run.mkString("->"))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 20
В контракте темы «Линеаризация» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 15 из 20
При проверке темы «Линеаризация» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 16 из 20
В теме «Самотипы» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaСамотипы: чтение фрагмента
trait Clock: def now: Long
trait Timed:
  this: Clock =>
  def stamp = now
class Service extends Timed, Clock:
  def now = 42L
println(Service().stamp)
Вопрос 17 из 20
Для темы «Самотипы» какой пограничный случай относится к контракту, а не только к стилю записи?
Вопрос 18 из 20
При исправлении темы «Самотипы» что здесь лучше исправить до объединения изменений?
ScalaСамотипы: решение на ревью
trait Clock: def now: Long
trait Timed:
  this: Clock =>
  def stamp = now
class Service extends Timed, Clock:
  def now = 42L
println(Service().stamp)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 20
В контракте темы «Самотипы» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 20 из 20
При проверке темы «Самотипы» что поможет соседнему модулю не повторить ту же ошибку?

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

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

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

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