Logical Operators
Ruby has three logical operators, && (AND), || (OR), and ! (NOT). &&
evaluates to true if both its operands are true. || evaluates to true if
at least one operand is true. ! returns true if its operand is false and
true if its operand is false.
In true || false, the Ruby interpreter doesn't evaluate the code after ||
because it's irrelevant. Since the first operand is true, the expression will
be true regardless of the second operand. This behavior is an example of
short-circuit evaluation, where the second operand of a logical operator is
evaluated only if the first operand does not suffice to determine the value of
the expression. Conversely, false && true is also an example of
short-circuiting (the expression will be false regardless of the second
operand).
!, sometimes known as bang, reverses the boolean value of its operand.
Though ! receives a single operand, that operand can be the result of an
expression. !(false || true) returns false. !false || true would return
true and would short-circuit.
&& and || also permit expressions as operands: