RB Ruby  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Итераторы и внешнее перечисление

Тест «Итераторы и внешнее перечисление» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 25 вопросов, 14 заданий с Ruby-кодом и 5 тематических шкал.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 70 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 5 тематических результатов и разбор всех ответов.
Вопрос 1 из 25
Что произойдёт после последней строки в примере по теме «Внешний итератор Enumerator»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Внешний итератор Enumerator
# Проследите выполнение и выберите точный результат.
enum = [10, 20, 30].each
p enum.next
p enum.next
enum.rewind
p enum.next
Вопрос 2 из 25
Проследите выполнение фрагмента. Какой результат верен для темы «Протокол обхода each»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Протокол обхода each
# Проследите выполнение и выберите точный результат.
class Evens
  include Enumerable
  def each
    return enum_for(__method__) unless block_given?
    yield 2
    yield 4
    self
  end
end
p Evens.new.each.to_a
Вопрос 3 из 25
Что покажет выполнение этого фрагмента из раздела «Ленивость»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Ленивость
# Проследите выполнение и выберите точный результат.
seen = 0
result = (1..).lazy
  .map { |n| seen += 1; n * 2 }
  .select { |n| n > 4 }
  .first(2)
p [result, seen]
Вопрос 4 из 25
Какая трассировка кода по теме «Собственный итератор» не теряет важную деталь? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Собственный итератор
# Проследите выполнение и выберите точный результат.
squares = Enumerator.new do |y|
  1.upto(3) { |n| y << n * n }
end
p squares.to_a
Вопрос 5 из 25
Как изменится состояние программы после выполнения кода по теме «Пограничные случаи»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Пограничные случаи
# Проследите выполнение и выберите точный результат.
enum = %w[a b].each
p enum.next
p enum.next
begin
  enum.next
rescue StopIteration => e
  p e.result
end
Вопрос 6 из 25
Какое скрытое условие делает фрагмент «Внешний итератор Enumerator» хрупким? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Внешний итератор Enumerator
# Обычный запуск проходит. Найдите скрытый риск.
enum = [10, 20, 30].each
p enum.next
p enum.next
enum.rewind
p enum.next
Вопрос 7 из 25
Где в показанном решении «Протокол обхода each» скрыт дефект, который проявится не на каждом входе? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Протокол обхода each
# Обычный запуск проходит. Найдите скрытый риск.
class Evens
  include Enumerable
  def each
    return enum_for(__method__) unless block_given?
    yield 2
    yield 4
    self
  end
end
p Evens.new.each.to_a
Вопрос 8 из 25
Какой рабочий сбой вероятнее всего связан именно с механизмом «Ленивость»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Ленивость
# Обычный запуск проходит. Найдите скрытый риск.
seen = 0
result = (1..).lazy
  .map { |n| seen += 1; n * 2 }
  .select { |n| n > 4 }
  .first(2)
p [result, seen]
Вопрос 9 из 25
Обычный сценарий проходит. Какой риск остаётся в теме «Собственный итератор»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Собственный итератор
# Обычный запуск проходит. Найдите скрытый риск.
squares = Enumerator.new do |y|
  1.upto(3) { |n| y << n * n }
end
p squares.to_a
Вопрос 10 из 25
Почему успешный пример ещё не доказывает надёжность решения «Пограничные случаи»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Пограничные случаи
# Обычный запуск проходит. Найдите скрытый риск.
enum = %w[a b].each
p enum.next
p enum.next
begin
  enum.next
rescue StopIteration => e
  p e.result
end
Вопрос 11 из 25
Как сформулировать правило блока «Внешний итератор Enumerator» без лишних обещаний? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 12 из 25
Почему показанный фрагмент «Протокол обхода each» ведёт себя именно так? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 13 из 25
Какое правило Ruby или Rails объясняет поведение в теме «Ленивость»? Правильным считается только полностью согласованное утверждение.
Вопрос 14 из 25
Как сформулировать правило блока «Собственный итератор» без лишних обещаний? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 15 из 25
Какой механизм объясняет и обычный, и граничный сценарий «Пограничные случаи»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 16 из 25
Какое исправление уменьшает риск, не скрывая исходное поведение «Внешний итератор Enumerator»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Внешний итератор Enumerator
# Выберите изменение, которое исправляет причину.
enum = [10, 20, 30].each
p enum.next
p enum.next
enum.rewind
p enum.next
Вопрос 17 из 25
Что следует изменить в решении «Протокол обхода each», чтобы закрыть исходный риск? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Протокол обхода each
# Выберите изменение, которое исправляет причину.
class Evens
  include Enumerable
  def each
    return enum_for(__method__) unless block_given?
    yield 2
    yield 4
    self
  end
end
p Evens.new.each.to_a
Вопрос 18 из 25
Какое исправление уменьшает риск, не скрывая исходное поведение «Ленивость»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Ленивость
# Выберите изменение, которое исправляет причину.
seen = 0
result = (1..).lazy
  .map { |n| seen += 1; n * 2 }
  .select { |n| n > 4 }
  .first(2)
p [result, seen]
Вопрос 19 из 25
Какое действие добавляет недостающую гарантию в блоке «Собственный итератор»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Собственный итератор
# Выберите изменение, которое исправляет причину.
squares = Enumerator.new do |y|
  1.upto(3) { |n| y << n * n }
end
p squares.to_a
Вопрос 20 из 25
Какое исправление уменьшает риск, не скрывая исходное поведение «Пограничные случаи»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 21 из 25
Что нужно воспроизвести отдельно перед выпуском изменения «Внешний итератор Enumerator»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 22 из 25
Какой сценарий проверит не только результат, но и побочный эффект решения «Протокол обхода each»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 23 из 25
Какую границу контракта «Ленивость» нужно закрепить отдельным тестом? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 24 из 25
Какой случай покажет, что исправление «Собственный итератор» не держится на удачном входе? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 25 из 25
Какой случай покажет, что исправление «Пограничные случаи» не держится на удачном входе? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.

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

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

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

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