💡 Инструкция: Выберите один ответ из пяти. Время — 55 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 4 тематических результатов и разбор всех ответов.
Вопрос 1 из 20
Разберите выражения по порядку. Как завершится фрагмент из раздела «Модель объектов»? Нужен вариант без логического разрыва между первой и второй частью.
Ruby Ruby — Модель объектов Копировать
# Проследите выполнение и выберите точный результат.
value = 7
report = [value.class, value.next, nil.nil?]
p report
Массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент. Это объясняется тем, что в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
После `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`. Это объясняется тем, что в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной. Это объясняется тем, что в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной. Это объясняется тем, что повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной. Это объясняется тем, что локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Вопрос 2 из 20
Как следует прочитать результат показанного примера «Локальные переменные»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Ruby Ruby — Локальные переменные Копировать
# Проследите выполнение и выберите точный результат.
if false
token = 1
end
p defined?(token)
p token
Массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент. Причина такого результата: локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
После `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError. Причина такого результата: в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
После `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`. Причина такого результата: локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
После `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError. Причина такого результата: повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
После `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError. Причина такого результата: локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Вопрос 3 из 20
Проследите выполнение фрагмента. Какой результат верен для темы «Константы»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Ruby Ruby — Константы Копировать
# Проследите выполнение и выберите точный результат.
LIMITS = [10, 20]
LIMITS << 30
p LIMITS
p LIMITS.object_id
Массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент. Такой итог следует из правила: в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент. Такой итог следует из правила: повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
После `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`. Такой итог следует из правила: повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной. Такой итог следует из правила: повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент. Такой итог следует из правила: локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Вопрос 4 из 20
Какой фактический результат даст этот фрагмент по теме «Изменяемость»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Ruby Ruby — Изменяемость Копировать
# Проследите выполнение и выберите точный результат.
name = +'Ruby'
alias_name = name
alias_name.upcase!
p [name, alias_name, name.equal?(alias_name)]
Массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент. Механизм результата таков: присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса.
После `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`. Механизм результата таков: локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
После `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError. Механизм результата таков: присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса.
После `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`. Механизм результата таков: повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
После `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`. Механизм результата таков: присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса.
Вопрос 5 из 20
Обычный сценарий проходит. Какой риск остаётся в теме «Модель объектов»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Ruby Ruby — Модель объектов Копировать
# Обычный запуск проходит. Найдите скрытый риск.
value = 7
report = [value.class, value.next, nil.nil?]
p report
Перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов. Причина — в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация. Причина — в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов. Причина — локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов. Причина — повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса. Причина — в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Вопрос 6 из 20
Базовый пример выглядит корректно. Что всё же нарушает контракт в блоке «Локальные переменные»? Верный вариант не содержит частично правильной подмены причины или следствия.
Ruby Ruby — Локальные переменные Копировать
# Обычный запуск проходит. Найдите скрытый риск.
if false
token = 1
end
p defined?(token)
p token
Разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала. Этот риск связан с тем, что в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала. Этот риск связан с тем, что локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала. Этот риск связан с тем, что повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса. Этот риск связан с тем, что локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация. Этот риск связан с тем, что локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Вопрос 7 из 20
Что может сломаться при переносе этого решения «Константы» в рабочую систему? Правильным считается только полностью согласованное утверждение.
Ruby Ruby — Константы Копировать
# Обычный запуск проходит. Найдите скрытый риск.
LIMITS = [10, 20]
LIMITS << 30
p LIMITS
p LIMITS.object_id
Название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса. Уязвимое место возникает потому, что в Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя.
Перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов. Уязвимое место возникает потому, что повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация. Уязвимое место возникает потому, что повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса. Уязвимое место возникает потому, что повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса. Уязвимое место возникает потому, что локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Вопрос 8 из 20
Базовый пример выглядит корректно. Что всё же нарушает контракт в блоке «Изменяемость»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Ruby Ruby — Изменяемость Копировать
# Обычный запуск проходит. Найдите скрытый риск.
name = +'Ruby'
alias_name = name
alias_name.upcase!
p [name, alias_name, name.equal?(alias_name)]
Незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация. К такому сбою приводит правило: повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми.
Разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала. К такому сбою приводит правило: присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса.
Незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация. К такому сбою приводит правило: присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса.
Название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса. К такому сбою приводит правило: присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса.
Незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация. К такому сбою приводит правило: локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась.
Вопрос 9 из 20
Какое правило Ruby или Rails объясняет поведение в теме «Модель объектов»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
В Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя. Поэтому выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной.
В Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя. Поэтому массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент.
Повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми. Поэтому выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной.
В Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя. Поэтому после `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`.
Локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась. Поэтому выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной.
Вопрос 10 из 20
Какой принцип темы «Локальные переменные» переносится на другие примеры того же типа? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась. Из этого следует, что массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент.
Локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась. Из этого следует, что после `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError.
В Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя. Из этого следует, что после `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError.
Локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась. Из этого следует, что после `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`.
Повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми. Из этого следует, что после `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError.
Вопрос 11 из 20
Какой принцип темы «Константы» переносится на другие примеры того же типа? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми. Наблюдаемое следствие: после `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`.
Повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми. Наблюдаемое следствие: выражение 7.next возвращает 8, а 7.class — Integer: числовой литерал не является особой безобъектной величиной.
Локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась. Наблюдаемое следствие: массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент.
Повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми. Наблюдаемое следствие: массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент.
В Ruby числа, символы, nil, true и false — такие же объекты, как строки и массивы; вызов метода всегда имеет получателя. Наблюдаемое следствие: массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент.
Вопрос 12 из 20
Что является технической причиной наблюдаемого поведения «Изменяемость»? Нужен вариант без логического разрыва между первой и второй частью.
Присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса. Именно поэтому массив в константе можно изменить через `<<`, поэтому последующий вывод содержит добавленный элемент.
Повторное присваивание константе разрешено с предупреждением; слово «константа» не делает объект или привязку физически неизменяемыми. Именно поэтому после `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`.
Присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса. Именно поэтому после `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`.
Присваивание копирует ссылку на объект; методы с `!` часто меняют получателя, а без `!` обычно возвращают новый объект, но это соглашение, не правило синтаксиса. Именно поэтому после `if false; token = 1; end` чтение `token` возвращает nil, а не вызывает NameError.
Локальная переменная появляется в области видимости уже из-за синтаксического присваивания, даже если ветка с присваиванием не выполнялась. Именно поэтому после `alias_name = name` и `alias_name.upcase!` обе переменные указывают на строку `RUBY`.
Вопрос 13 из 20
Что нужно поменять, чтобы ошибка «Модель объектов» не возвращалась при следующем изменении? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Ruby Ruby — Модель объектов Копировать
# Выберите изменение, которое исправляет причину.
value = 7
report = [value.class, value.next, nil.nil?]
p report
При чтении выражения сначала назвать получателя, затем найденный у него метод и лишь после этого предсказывать результат. Так закрывается риск: название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса.
При чтении выражения сначала назвать получателя, затем найденный у него метод и лишь после этого предсказывать результат. Так закрывается риск: перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов.
При чтении выражения сначала назвать получателя, затем найденный у него метод и лишь после этого предсказывать результат. Так закрывается риск: незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация.
Замораживать не только контейнер, но и вложенные изменяемые значения либо строить новую конфигурацию без общей мутации. Так закрывается риск: перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов.
Инициализировать обязательное значение явно до ветвления либо завершать выполнение, если ни одна ветка не смогла его получить. Так закрывается риск: перенос модели примитивов из других языков заставляет ошибочно ожидать упаковку, сравнение «по значению» вне методов или запрет вызовов у литералов.
Вопрос 14 из 20
Какой рефакторинг переводит правило «Локальные переменные» из договорённости в проверяемый контракт? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Ruby Ruby — Локальные переменные Копировать
# Выберите изменение, которое исправляет причину.
if false
token = 1
end
p defined?(token)
p token
Инициализировать обязательное значение явно до ветвления либо завершать выполнение, если ни одна ветка не смогла его получить. Это изменение устраняет проблему: разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала.
Инициализировать обязательное значение явно до ветвления либо завершать выполнение, если ни одна ветка не смогла его получить. Это изменение устраняет проблему: незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация.
При чтении выражения сначала назвать получателя, затем найденный у него метод и лишь после этого предсказывать результат. Это изменение устраняет проблему: разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала.
Замораживать не только контейнер, но и вложенные изменяемые значения либо строить новую конфигурацию без общей мутации. Это изменение устраняет проблему: разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала.
Инициализировать обязательное значение явно до ветвления либо завершать выполнение, если ни одна ветка не смогла его получить. Это изменение устраняет проблему: название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса.
Вопрос 16 из 20
Что нужно поменять, чтобы ошибка «Изменяемость» не возвращалась при следующем изменении? Выберите связку, в которой верны и основной вывод, и его обоснование.
При чтении выражения сначала назвать получателя, затем найденный у него метод и лишь после этого предсказывать результат. Решение адресует следующий дефект: незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация.
На границе метода явно выбирать: изменять переданный объект, дублировать его или возвращать новый; решение закреплять тестом на `object_id` и содержимое. Решение адресует следующий дефект: разработчик может принять nil за осмысленное значение и пропустить то, что ветка инициализации вообще не сработала.
На границе метода явно выбирать: изменять переданный объект, дублировать его или возвращать новый; решение закреплять тестом на `object_id` и содержимое. Решение адресует следующий дефект: незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация.
Инициализировать обязательное значение явно до ветвления либо завершать выполнение, если ни одна ветка не смогла его получить. Решение адресует следующий дефект: незаметное совместное владение изменяемым объектом приводит к побочным эффектам далеко от строки, где была выполнена мутация.
На границе метода явно выбирать: изменять переданный объект, дублировать его или возвращать новый; решение закреплять тестом на `object_id` и содержимое. Решение адресует следующий дефект: название заглавными буквами создаёт ложное чувство неизменяемости конфигурации и допускает изменение общего объекта из любого места процесса.