вступление

Оператор условного присваивания, иначе называемый «или-равно», широко используется почти во всех современных языках программирования. Он действует как комбинация двух отдельных операторов «||». который мы называем оператором «или», а еще один «=» — оператором присваивания.

Пример Ruby (обычное использование «||»)

Чтобы проиллюстрировать разницу, давайте просто взглянем на пару примеров с использованием обычного «||». оператор. Мы будем печатать переменную списка «комментарии» в обоих случаях.
В первом случае она вернет пустой список, потому что ранее у нее не было значения (у нее было значение «nil»), а в качестве значения присваивания она получает значение справа, это пустой список.

# Example-1
comments = nil
comments = comments || []
puts comments  # returns [], empty list

Во втором примере, поскольку переменная «комментарии» уже имеет значение, т. е. ранее не была пустой, она просто возвращает свой результат, который стоит первым значением в присваивании.

# Example-2
comments = ["First comment"]
comments = comments || []
puts comments  # returns ["First comment"]

Пример Ruby (использование условного присваивания «||=»)

На этот раз мы проиллюстрируем использование оператора условного присваивания «||=». Мы будем печатать переменную списка «комментарии» в обоих случаях, как и в разделе выше.
В первом случае он вернет пустой список, потому что ранее он не имел значения (у него было значение «nil») и в качестве значения присваивания он получает значение справа, то есть пустой список.

# Example-1
comments = nil
comments ||= []
puts comments  # returns [], empty list

Во втором примере, поскольку переменная «комментарии» уже имеет значение, т.е. ранее не была пустой, она просто получает свое предыдущее значение в присваивании.

# Example-2
comments = ["First comment"]
comments ||= []
puts comments  # returns ["First comment"]

Еще короче

На самом деле это позволяет нам сократить более длинную условную проверку и присваивание до одной строки. Давайте посмотрим на пример, который получает переменную списка «комментарии».

module Commentable
   def comments
      if @comments
         @comments
      else
         @comments = []
      end
   end
end

И здесь мы сокращаем содержимое функции до одной строки.

module Commentable
   def comments
      @comments ||= []
   end
end

И это был отличный пример того, как мы можем сократить многострочную операцию проверки и присваивания до одной строки.

Приведенные выше примеры были продемонстрированы с использованием Ruby PL, но оператор условного присваивания можно использовать и в других языках, таких как Javascript, Python и многих других. Так что продолжайте экспериментировать…