💡 Инструкция: Выберите один ответ из пяти. Время — 55 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 4 тематических результатов и разбор всех ответов.
Вопрос 1 из 20
Проследите выполнение фрагмента. Какой результат верен для темы «Позиционные аргументы»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Ruby Ruby — Позиционные аргументы Копировать
# Проследите выполнение и выберите точный результат.
def area(width, height = 2)
[width, height]
end
p area(3)
p area(3, 5)
Вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию. Это объясняется тем, что позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию. Это объясняется тем, что Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение. Это объясняется тем, что позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию. Это объясняется тем, что одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`. Это объясняется тем, что позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Вопрос 2 из 20
Как следует прочитать результат показанного примера «Ключевые аргументы»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Ruby Ruby — Ключевые аргументы Копировать
# Проследите выполнение и выберите точный результат.
def connect(timeout:, retries: 2)
[timeout, retries]
end
opts = { timeout: 5 }
p connect(**opts)
Вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию. Причина такого результата: ключевые аргументы в современных Ruby отделены от позиционного Hash и проверяются по именам.
Метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`. Причина такого результата: позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение. Причина такого результата: ключевые аргументы в современных Ruby отделены от позиционного Hash и проверяются по именам.
Метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`. Причина такого результата: ключевые аргументы в современных Ruby отделены от позиционного Hash и проверяются по именам.
Метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`. Причина такого результата: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Вопрос 3 из 20
Как изменится состояние программы после выполнения кода по теме «Распаковка аргументов (splat)»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Ruby Ruby — Распаковка аргументов (splat) Копировать
# Проследите выполнение и выберите точный результат.
def unpack(first, *rest, **meta)
[first, rest, meta]
end
p unpack(1, 2, 3, unit: :ms)
Для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение. Такой итог следует из правила: одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию. Такой итог следует из правила: одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`. Такой итог следует из правила: одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`. Такой итог следует из правила: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`. Такой итог следует из правила: позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Вопрос 4 из 20
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Возврат значения»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Ruby Ruby — Возврат значения Копировать
# Проследите выполнение и выберите точный результат.
def normalize(value)
return :negative if value.negative?
value * 2
end
p [normalize(-1), normalize(4)]
Для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение. Механизм результата таков: одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение. Механизм результата таков: позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию. Механизм результата таков: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение. Механизм результата таков: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`. Механизм результата таков: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Вопрос 7 из 20
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Распаковка аргументов (splat)»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Ruby Ruby — Распаковка аргументов (splat) Копировать
# Обычный запуск проходит. Найдите скрытый риск.
def unpack(first, *rest, **meta)
[first, rest, meta]
end
p unpack(1, 2, 3, unit: :ms)
Добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки. Уязвимое место возникает потому, что одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Без явного `**options` проксирующий метод может перестать передавать ключевые аргументы после обновления старого кода. Уязвимое место возникает потому, что одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя. Уязвимое место возникает потому, что позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя. Уязвимое место возникает потому, что одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя. Уязвимое место возникает потому, что Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Вопрос 8 из 20
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Возврат значения»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Ruby Ruby — Возврат значения Копировать
# Обычный запуск проходит. Найдите скрытый риск.
def normalize(value)
return :negative if value.negative?
value * 2
end
p [normalize(-1), normalize(4)]
Служебный вызов, добавленный в конец метода после вычисления результата, может изменить контракт на его собственное возвращаемое значение. К такому сбою приводит правило: одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры.
Служебный вызов, добавленный в конец метода после вычисления результата, может изменить контракт на его собственное возвращаемое значение. К такому сбою приводит правило: позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода.
Служебный вызов, добавленный в конец метода после вычисления результата, может изменить контракт на его собственное возвращаемое значение. К такому сбою приводит правило: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя. К такому сбою приводит правило: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки. К такому сбою приводит правило: Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод.
Вопрос 9 из 20
Как сформулировать правило блока «Позиционные аргументы» без лишних обещаний? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода. Поэтому для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение.
Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод. Поэтому вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию.
Одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры. Поэтому вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию.
Позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода. Поэтому метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`.
Позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода. Поэтому вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию.
Вопрос 10 из 20
Какой механизм объясняет и обычный, и граничный сценарий «Ключевые аргументы»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Ключевые аргументы в современных Ruby отделены от позиционного Hash и проверяются по именам. Из этого следует, что для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение.
Ключевые аргументы в современных Ruby отделены от позиционного Hash и проверяются по именам. Из этого следует, что метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`.
Позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода. Из этого следует, что метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`.
Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод. Из этого следует, что метод получает `timeout: 5` и стандартное `retries: 2`, возвращая пару `[5, 2]`.
Ключевые аргументы в современных Ruby отделены от позиционного Hash и проверяются по именам. Из этого следует, что вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию.
Вопрос 11 из 20
Какой механизм объясняет и обычный, и граничный сценарий «Распаковка аргументов (splat)»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Позиционные аргументы сопоставляются по порядку; значения по умолчанию вычисляются при каждом вызове метода. Наблюдаемое следствие: метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`.
Одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры. Наблюдаемое следствие: вызовы возвращают `[3, 2]` и `[3, 5]`: пропущен только второй аргумент, для которого объявлено значение по умолчанию.
Одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры. Наблюдаемое следствие: метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`.
Одинарный splat собирает и раскрывает позиционные аргументы, двойной splat — ключевые; это две разные части сигнатуры. Наблюдаемое следствие: для отрицательного числа метод возвращает `:negative`, а для положительного — удвоенное значение.
Ruby неявно возвращает значение последнего выполненного выражения; явный `return` немедленно покидает метод. Наблюдаемое следствие: метод разделяет первый элемент, остальные позиционные значения и именованные параметры, возвращая `[1, [2, 3], {unit: :ms}]`.
Вопрос 13 из 20
Какой вариант правки выдержит граничный сценарий темы «Позиционные аргументы»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Ruby Ruby — Позиционные аргументы Копировать
# Выберите изменение, которое исправляет причину.
def area(width, height = 2)
[width, height]
end
p area(3)
p area(3, 5)
После сбора `**meta` валидировать набор ключей или передавать его типизированному объекту, который отвергнет неизвестные поля. Так закрывается риск: добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки.
Для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом. Так закрывается риск: без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя.
Сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой. Так закрывается риск: добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки.
Для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом. Так закрывается риск: без явного `**options` проксирующий метод может перестать передавать ключевые аргументы после обновления старого кода.
Для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом. Так закрывается риск: добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки.
Вопрос 14 из 20
Какое действие добавляет недостающую гарантию в блоке «Ключевые аргументы»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Ruby Ruby — Ключевые аргументы Копировать
# Выберите изменение, которое исправляет причину.
def connect(timeout:, retries: 2)
[timeout, retries]
end
opts = { timeout: 5 }
p connect(**opts)
После сбора `**meta` валидировать набор ключей или передавать его типизированному объекту, который отвергнет неизвестные поля. Это изменение устраняет проблему: без явного `**options` проксирующий метод может перестать передавать ключевые аргументы после обновления старого кода.
В обёртках либо перечислять поддерживаемые ключи, либо осознанно использовать `**kwargs` и тестировать передачу дальше. Это изменение устраняет проблему: без явного `**options` проксирующий метод может перестать передавать ключевые аргументы после обновления старого кода.
Сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой. Это изменение устраняет проблему: без явного `**options` проксирующий метод может перестать передавать ключевые аргументы после обновления старого кода.
В обёртках либо перечислять поддерживаемые ключи, либо осознанно использовать `**kwargs` и тестировать передачу дальше. Это изменение устраняет проблему: без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя.
В обёртках либо перечислять поддерживаемые ключи, либо осознанно использовать `**kwargs` и тестировать передачу дальше. Это изменение устраняет проблему: добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки.
Вопрос 16 из 20
Какой подход сохраняет намерение кода и устраняет дефект в теме «Возврат значения»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом. Решение адресует следующий дефект: служебный вызов, добавленный в конец метода после вычисления результата, может изменить контракт на его собственное возвращаемое значение.
После сбора `**meta` валидировать набор ключей или передавать его типизированному объекту, который отвергнет неизвестные поля. Решение адресует следующий дефект: служебный вызов, добавленный в конец метода после вычисления результата, может изменить контракт на его собственное возвращаемое значение.
Сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой. Решение адресует следующий дефект: без ограничения допустимых ключей `**meta` может проглотить опечатку и отложить ошибку до значительно более позднего слоя.
Сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой. Решение адресует следующий дефект: служебный вызов, добавленный в конец метода после вычисления результата, может изменить контракт на его собственное возвращаемое значение.
Сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой. Решение адресует следующий дефект: добавление нового позиционного параметра в середину публичного метода меняет смысл старых вызовов без синтаксической ошибки.
Вопрос 17 из 20
Какой сценарий должен падать на старой реализации и проходить после исправления «Позиционные аргументы»? Нужен вариант без логического разрыва между первой и второй частью.
Проверить слишком малое и слишком большое число аргументов: Ruby поднимает ArgumentError, если их не поглощает splat. Этот сценарий проверяет исправление: сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой.
Проверить слишком малое и слишком большое число аргументов: Ruby поднимает ArgumentError, если их не поглощает splat. Этот сценарий проверяет исправление: после сбора `**meta` валидировать набор ключей или передавать его типизированному объекту, который отвергнет неизвестные поля.
Проверить пустые `rest` и `meta`, а также различие между `*hash` и `**hash` в актуальной версии Ruby. Этот сценарий проверяет исправление: для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом.
Проверить неизвестный ключ и отсутствие обязательного ключа: оба случая должны завершаться понятной ошибкой. Этот сценарий проверяет исправление: для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом.
Проверить слишком малое и слишком большое число аргументов: Ruby поднимает ArgumentError, если их не поглощает splat. Этот сценарий проверяет исправление: для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом.
Вопрос 18 из 20
Какой случай покажет, что исправление «Ключевые аргументы» не держится на удачном входе? Выберите связку, в которой верны и основной вывод, и его обоснование.
Проверить неизвестный ключ и отсутствие обязательного ключа: оба случая должны завершаться понятной ошибкой. Так проверяется решение: в обёртках либо перечислять поддерживаемые ключи, либо осознанно использовать `**kwargs` и тестировать передачу дальше.
Проверить пустые `rest` и `meta`, а также различие между `*hash` и `**hash` в актуальной версии Ruby. Так проверяется решение: в обёртках либо перечислять поддерживаемые ключи, либо осознанно использовать `**kwargs` и тестировать передачу дальше.
Проверить неизвестный ключ и отсутствие обязательного ключа: оба случая должны завершаться понятной ошибкой. Так проверяется решение: после сбора `**meta` валидировать набор ключей или передавать его типизированному объекту, который отвергнет неизвестные поля.
Проверить неизвестный ключ и отсутствие обязательного ключа: оба случая должны завершаться понятной ошибкой. Так проверяется решение: сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой.
Проверить слишком малое и слишком большое число аргументов: Ruby поднимает ArgumentError, если их не поглощает splat. Так проверяется решение: в обёртках либо перечислять поддерживаемые ключи, либо осознанно использовать `**kwargs` и тестировать передачу дальше.
Вопрос 20 из 20
Что следует добавить в набор проверок по теме «Возврат значения», чтобы поймать редкий отказ? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Проверить `return` внутри переданного блока: у обычного Proc и lambda он ведёт себя по-разному. Сценарий подтверждает надёжность решения: сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой.
Проверить пустые `rest` и `meta`, а также различие между `*hash` и `**hash` в актуальной версии Ruby. Сценарий подтверждает надёжность решения: сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой.
Проверить `return` внутри переданного блока: у обычного Proc и lambda он ведёт себя по-разному. Сценарий подтверждает надёжность решения: для нескольких одинаковых по типу параметров перейти к ключевым аргументам или объекту параметров, чтобы порядок не был скрытым контрактом.
Проверить `return` внутри переданного блока: у обычного Proc и lambda он ведёт себя по-разному. Сценарий подтверждает надёжность решения: после сбора `**meta` валидировать набор ключей или передавать его типизированному объекту, который отвергнет неизвестные поля.
Проверить неизвестный ключ и отсутствие обязательного ключа: оба случая должны завершаться понятной ошибкой. Сценарий подтверждает надёжность решения: сохранять вычисленный результат в ясно названной переменной, если после него нужны побочные действия, и возвращать его последней строкой.