В недавнем сообщении в блоге, которое я прочитал Томом Даллингом, я познакомился с идеей никогда не переназначать переменные. Это было частью большой дискуссии о том, как избежать мутаций в Ruby, но я хотел сосредоточиться на том, почему простое действие установки переменных делает ваш код лучше.

В течение большей части 4 месяцев концепция СУХОГО (не повторяйся) кода оставалась со мной всякий раз, когда я пишу код на Ruby. Если я делаю что-то более одного раза, это, вероятно, относится к методу. При рефакторинге одного из моих недавних проектов я заметил раздражающую закономерность. Я создавал переменные как nil, 0 или пустые массивы, которые будут установлены позже в методе.

Обычно это означало, что я устанавливал их внутри условного блока или блока цикла. Причина, по которой я делаю это, заключается в том, что, помимо переменных экземпляра или класса, переменные доступны только из блока, в котором они объявлены. Однако переменные доступны для дочернего блока, поэтому объявление переменной вне цикла или условного позволяет мне установить его внутри, а затем использовать его снова снаружи.

Прокручивая несколько методов и видя это, я понимаю, что мой код не СУХОЙ. Я повторяюсь, но не с идентичными строками кода, а скорее с повторяющимся шаблоном установки и сброса переменных. Там должен быть лучший способ! Ну есть.

Сегодня я обнаружил, что вы можете использовать возвращаемое значение условного оператора или цикла для установки переменных. Что это значит, спросите вы? Ну, часто условные операторы, которые я пишу, написаны с единственной целью установки переменных. Почему бы просто не вернуть вывод в вызывающий блок?

discount_amount = 0
if customer.purchased_discounted_items?
  discount_amount = 10
end

Традиционно это то, что я написал бы, если бы мне нужно было установить переменную внутри условного оператора. Вместо этого это можно свести к одной строке.

discount_amount = customer.puchased_discounted_items? ? 10 : 0

В приведенном выше примере используется тернарный оператор Ruby, сокращение для условных операторов.

Код, который не повторяется, легче читать. Я твердо верю в написание кода, который устраняет проблемы повторения везде, где это возможно. Это также часто приводит к меньшему количеству кода. Другим или вам в будущем будет легче читать, если у вас будет меньше кода, который делает одну вещь в одном месте.