Какая разница между "and" и "&&"?

В первую очередь, приоритет. Как в естественном языке "&&" (или &) имеет больший приоритет, чем "and". В частности, "and" имеет более низкий
приоритет, чем "=". Некоторые попадаются в ловушку в следующем примере:

   have_both = a and b

что эквивалентно

  (have_both = a) and b

Вместо этого следует использовать один из следующих вариантов:

  have_both = a && b
  have_both = (a and b)
  if a and b
    # ...
  end

Вкратце, "&&" is good for chaining values conditionally; "and" is good for chaining statements conditionally. Результат "and" выражения не следует использовать где-то кроме булевского выражения.

Следующий код предотвращает ошибку, если arr - это nil:

  result = arr && arr.size

Следующий пример - это короткий вариант записи if ... then ... else .... :

  action() and
    LOG.info "Performed action" or
    LOG.info "Failed to perform action"

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

Вход для пользователей