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

Модули и mixin-композиция

Тест «Модули и mixin-композиция» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 20 вопросов, 10 заданий с Ruby-кодом и 4 тематических шкал.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 55 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 4 тематических результатов и разбор всех ответов.
Вопрос 1 из 20
Что произойдёт после последней строки в примере по теме «Подключение методов через include»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Подключение методов через include
# Проследите выполнение и выберите точный результат.
module Labels
  def label
    'item'
  end
end
class Formatter
  include Labels
end
p Formatter.ancestors
p Formatter.new.label
Вопрос 2 из 20
Не запуская пример, выберите точный итог для блока «Обёртка методов через prepend». Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Обёртка методов через prepend
# Проследите выполнение и выберите точный результат.
module Audit
  def save(*)
    "logged(#{super})"
  end
end
class Record
  prepend Audit
  def save
    'saved'
  end
end
p Record.new.save
Вопрос 3 из 20
Как изменится состояние программы после выполнения кода по теме «Расширение объекта через extend»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Расширение объекта через extend
# Проследите выполнение и выберите точный результат.
module Health
  def healthy?
    true
  end
end
service = Object.new
service.extend(Health)
p [service.healthy?, Object.new.respond_to?(:healthy?)]
Вопрос 4 из 20
Проследите выполнение фрагмента. Какой результат верен для темы «Пространства имён»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Пространства имён
# Проследите выполнение и выберите точный результат.
module Billing
  CURRENCY = 'EUR'
  class Invoice
    def currency
      CURRENCY
    end
  end
end
p Billing::Invoice.new.currency
Вопрос 5 из 20
Какое допущение делает этот код по теме «Подключение методов через include» ненадёжным? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Подключение методов через include
# Обычный запуск проходит. Найдите скрытый риск.
module Labels
  def label
    'item'
  end
end
class Formatter
  include Labels
end
p Formatter.ancestors
p Formatter.new.label
Вопрос 6 из 20
Что в реализации по теме «Обёртка методов через prepend» требует исправления прежде всего? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Обёртка методов через prepend
# Обычный запуск проходит. Найдите скрытый риск.
module Audit
  def save(*)
    "logged(#{super})"
  end
end
class Record
  prepend Audit
  def save
    'saved'
  end
end
p Record.new.save
Вопрос 7 из 20
Что в реализации по теме «Расширение объекта через extend» требует исправления прежде всего? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Расширение объекта через extend
# Обычный запуск проходит. Найдите скрытый риск.
module Health
  def healthy?
    true
  end
end
service = Object.new
service.extend(Health)
p [service.healthy?, Object.new.respond_to?(:healthy?)]
Вопрос 8 из 20
Какой рабочий сбой вероятнее всего связан именно с механизмом «Пространства имён»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Пространства имён
# Обычный запуск проходит. Найдите скрытый риск.
module Billing
  CURRENCY = 'EUR'
  class Invoice
    def currency
      CURRENCY
    end
  end
end
p Billing::Invoice.new.currency
Вопрос 9 из 20
Какое общее правило связывает результат и риск в разделе «Подключение методов через include»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 10 из 20
Как сформулировать правило блока «Обёртка методов через prepend» без лишних обещаний? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 11 из 20
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Расширение объекта через extend»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 12 из 20
Какое правило Ruby или Rails объясняет поведение в теме «Пространства имён»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Вопрос 13 из 20
Какой вариант правки выдержит граничный сценарий темы «Подключение методов через include»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Подключение методов через include
# Выберите изменение, которое исправляет причину.
module Labels
  def label
    'item'
  end
end
class Formatter
  include Labels
end
p Formatter.ancestors
p Formatter.new.label
Вопрос 14 из 20
Как исправить реализацию «Обёртка методов через prepend» без новой скрытой зависимости? Правильным считается только полностью согласованное утверждение.
RubyRuby — Обёртка методов через prepend
# Выберите изменение, которое исправляет причину.
module Audit
  def save(*)
    "logged(#{super})"
  end
end
class Record
  prepend Audit
  def save
    'saved'
  end
end
p Record.new.save
Вопрос 15 из 20
Какой рефакторинг переводит правило «Расширение объекта через extend» из договорённости в проверяемый контракт? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 16 из 20
Какое инженерное решение лучше всего соответствует механизму «Пространства имён»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 17 из 20
Что нужно воспроизвести отдельно перед выпуском изменения «Подключение методов через include»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 18 из 20
Какой сценарий должен падать на старой реализации и проходить после исправления «Обёртка методов через prepend»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 19 из 20
Что следует добавить в набор проверок по теме «Расширение объекта через extend», чтобы поймать редкий отказ? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 20 из 20
Чем дополнить базовый тест, чтобы проверить ограничение темы «Пространства имён»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.

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

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

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

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