Когда не использовать "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
Мало того, что другие будут вам благодарны, когда будут читать ваш код, вы сами будете благодарить себя, когда вам придется вернуться к вашему коду спустя какое то время.

 
 
 
 
