SC Scala  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Продвинутая система типов Scala

Раздел «Продвинутая система типов Scala» соединяет небольшие фрагменты Scala с ревью и рабочими сценариями. Проверяются: Зависимые от пути типы, Типы высшего рода, Непрозрачные типы, Сопоставляемые типы, Границы применимости, Сопровождение проекта.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 30
В теме «Зависимые от пути типы» какую гарантию действительно даёт показанная конструкция?
ScalaЗависимые от пути типы: чтение фрагмента
trait Store:
  type Key
  def get(k: Key): String
object Names extends Store:
  type Key = Int
  def get(k: Int): String = s"name-$k"
val key: Names.Key = 7
println(Names.get(key))
Вопрос 2 из 30
Для темы «Зависимые от пути типы» обычный пример прошёл, затем изменились условия использования. Какой риск нужно проверить первым?
ScalaЗависимые от пути типы: изменившийся контекст
// Дополнительный контекст: Библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений.
trait Store:
  type Key
  def get(k: Key): String
object Names extends Store:
  type Key = Int
  def get(k: Int): String = s"name-$k"
val key: Names.Key = 7
println(Names.get(key))
Вопрос 3 из 30
При исправлении темы «Зависимые от пути типы» команда сравнивает несколько правок. Какая из них делает допущение явным и проверяемым?
ScalaЗависимые от пути типы: решение на ревью
trait Store:
  type Key
  def get(k: Key): String
object Names extends Store:
  type Key = Int
  def get(k: Int): String = s"name-$k"
val key: Names.Key = 7
println(Names.get(key))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 30
В контракте темы «Зависимые от пути типы» библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений. Какой анализ пригоден для публичного API?
F[_]:\ Type\to Type
Вопрос 5 из 30
Какой критерий готовности по теме «Зависимые от пути типы» действительно поймает повтор прежнего дефекта?
Вопрос 6 из 30
В теме «Типы высшего рода» как сформулировать семантику примера так, чтобы она сохранилась после переименования переменных?
ScalaТипы высшего рода: чтение фрагмента
def twice[F[_], A](fa: F[A])(using cats.Functor[F]): F[(A,A)] =
  cats.Functor[F].map(fa)(a => (a,a))
Вопрос 7 из 30
В каком дополнительном сценарии ожидания от «Типы высшего рода» перестанут выполняться?
ScalaТипы высшего рода: изменившийся контекст
// Дополнительный контекст: Типовую конструкцию перенесли в другой модуль, где набор импортов и область поиска `given` отличаются.
def twice[F[_], A](fa: F[A])(using cats.Functor[F]): F[(A,A)] =
  cats.Functor[F].map(fa)(a => (a,a))
Вопрос 8 из 30
При исправлении темы «Типы высшего рода» какой вариант не переносит проблему в вызывающий код?
ScalaТипы высшего рода: решение на ревью
def twice[F[_], A](fa: F[A])(using cats.Functor[F]): F[(A,A)] =
  cats.Functor[F].map(fa)(a => (a,a))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 30
В контракте темы «Типы высшего рода» какой вариант не теряет существенную часть технической картины?
x:a.Key\notin b.Key
Вопрос 10 из 30
При проверке темы «Типы высшего рода» какое правило следует зафиксировать тестом или пунктом ревью?
Вопрос 11 из 30
Во фрагменте проверяется тема «Непрозрачные типы». Какое правило точнее всего объясняет поведение кода?
ScalaНепрозрачные типы: чтение фрагмента
object UserId:
  opaque type UserId = Long
  def from(n: Long): Option[UserId] = Option.when(n > 0)(n)
  extension (id: UserId) def value: Long = id
Вопрос 12 из 30
Для темы «Непрозрачные типы» какой случай уже не покрывается показанной гарантией?
ScalaНепрозрачные типы: изменившийся контекст
// Дополнительный контекст: Обобщённую сигнатуру опубликовали в API, после чего появился ещё один допустимый экземпляр типа.
object UserId:
  opaque type UserId = Long
  def from(n: Long): Option[UserId] = Option.when(n > 0)(n)
  extension (id: UserId) def value: Long = id
Вопрос 13 из 30
При исправлении темы «Непрозрачные типы» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaНепрозрачные типы: решение на ревью
object UserId:
  opaque type UserId = Long
  def from(n: Long): Option[UserId] = Option.when(n > 0)(n)
  extension (id: UserId) def value: Long = id
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 30
В контракте темы «Непрозрачные типы» что следует оставить в проектном решении после этого изменения контекста?
Вопрос 15 из 30
При проверке темы «Непрозрачные типы» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 16 из 30
В теме «Сопоставляемые типы» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaСопоставляемые типы: чтение фрагмента
type Elem[X] = X match
  case String => Char
  case Array[t] => t
  case Iterable[t] => t
Вопрос 17 из 30
Для темы «Сопоставляемые типы» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaСопоставляемые типы: изменившийся контекст
// Дополнительный контекст: Библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений.
type Elem[X] = X match
  case String => Char
  case Array[t] => t
  case Iterable[t] => t
Вопрос 18 из 30
Какую правку стоит принять на ревью темы «Сопоставляемые типы»?
ScalaСопоставляемые типы: решение на ревью
type Elem[X] = X match
  case String => Char
  case Array[t] => t
  case Iterable[t] => t
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 30
В контракте темы «Сопоставляемые типы» библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений. Какой вывод одновременно сохраняет правило и учитывает его границу?
Вопрос 20 из 30
При проверке темы «Сопоставляемые типы» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?
Вопрос 21 из 30
Какой вывод о теме «Границы применимости» можно сделать без дополнительных допущений?
ScalaГраницы применимости: чтение фрагмента
enum Access:
  case Reader, Writer, Admin
def canDelete(role: Access): Boolean = role match
  case Access.Admin => true
  case Access.Reader | Access.Writer => false
println(canDelete(Access.Writer))
Вопрос 22 из 30
Для темы «Границы применимости» какое последствие нельзя исключить одним успешным запуском?
ScalaГраницы применимости: изменившийся контекст
// Дополнительный контекст: Обобщённую сигнатуру опубликовали в API, после чего появился ещё один допустимый экземпляр типа.
enum Access:
  case Reader, Writer, Admin
def canDelete(role: Access): Boolean = role match
  case Access.Admin => true
  case Access.Reader | Access.Writer => false
println(canDelete(Access.Writer))
Вопрос 23 из 30
При исправлении темы «Границы применимости» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaГраницы применимости: решение на ревью
enum Access:
  case Reader, Writer, Admin
def canDelete(role: Access): Boolean = role match
  case Access.Admin => true
  case Access.Reader | Access.Writer => false
println(canDelete(Access.Writer))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 30
В контракте темы «Границы применимости» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 25 из 30
При проверке темы «Границы применимости» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 26 из 30
В теме «Сопровождение проекта» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaСопровождение проекта: чтение фрагмента
trait Api:
  type Result
  def run(): Result
object IntApi extends Api:
  type Result = Int
  def run(): Int = 42
val result: IntApi.Result = IntApi.run()
println(result)
Вопрос 27 из 30
Для темы «Сопровождение проекта» какой пограничный случай относится к контракту, а не только к стилю записи?
ScalaСопровождение проекта: изменившийся контекст
// Дополнительный контекст: Обобщённую сигнатуру опубликовали в API, после чего появился ещё один допустимый экземпляр типа.
trait Api:
  type Result
  def run(): Result
object IntApi extends Api:
  type Result = Int
  def run(): Int = 42
val result: IntApi.Result = IntApi.run()
println(result)
Вопрос 28 из 30
При исправлении темы «Сопровождение проекта» что здесь лучше исправить до объединения изменений?
ScalaСопровождение проекта: решение на ревью
trait Api:
  type Result
  def run(): Result
object IntApi extends Api:
  type Result = Int
  def run(): Int = 42
val result: IntApi.Result = IntApi.run()
println(result)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 29 из 30
В контракте темы «Сопровождение проекта» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 30 из 30
При проверке темы «Сопровождение проекта» что поможет соседнему модулю не повторить ту же ошибку?

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

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

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

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