And или &&

March 28, 2012

Когда я делал свой первый интернет-магазин из Agile Web Development with Rails, мне понравилось, что программа выглядит как английский текст. После C++ это было так здорово. Я везде использовал and. Потом я где-то прочитал, что это неправильно и нужно в логических условиях использовать && и ||, а в render('help me') and die нужно использовать английские варианты. Я переключился на новый стиль.

Недавно я снова вернулся к данному вопросу, но не смог найти других отличий между and и && (or и ||) кроме приоритетов. Поэтому приведу несколько примеров, когда отличия будут существенные:

true and puts 'help' # => print 'help' to output
true && puts 'help'  # => SyntaxError: compile error ...

true or false and false # => false
true || false && false  # => true

redirect_to @post and return # OK
redirect_to @post && return  # Опасно, return не будет вызван

Разница незначительная, поэтому можно использовать любые варианты, однако мне больше нравится классический вариант:

if cond1 && cond2
# ...
end

redirect_to @post and return
comments powered by Disqus