Last Updated: February 25, 2016
·
691
· stardenis

Когда не использовать "unless"

Данная статья является вольным переводом статьи Making sense with Ruby's "unless", которая показалась мне очень полезной.

Среди вещей, которые новички (и джедаи!) в Руби считают восхитительными есть такие незначительные приятные мелочи, которые делают язык достаточно интуитивным. Показательный пример: unless

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

i += 1 unless i > 10

unless person.present?
    puts "There's no such person"
end

Однако, инструмент, который дает хотя бы немного возможностей, может использоваться в извращенном виде. Приведенный ниже код - яркий тому пример:

unless !person.present? && !company.present?
    puts "do you even know what you're doing?" 
else
    puts "and now we're really confused" 
end

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

Вот несколько правил при использовании unless:

1) Не следует использовать более одного логического условия. unless foo? это нормально, unless foo? && bar? значительно сложнее разобрать.

2) Избегайте отрицаний. unless - это уже отрицание. Исользование дополнительных отрицаний сделает условие только хуже.

3) Запомните! Никогда, никогда НЕ используйте else в одном условии с unless

Мало того, что другие будут вам благодарны, когда будут читать ваш код, вы сами будете благодарить себя, когда вам придется вернуться к вашему коду спустя какое то время.