Официальное название оператора ? :
это условный оператор,
хотя большинство людей знают его как тернарный оператор, указывая на количество его операндов.
Есть несколько унарных операторов (unary), которые работают с одним операндом. Например -
может быть унарным оператором.
Большинство операторов бинарные (binary) и работают с двумя операндами. Например *
всегда требует два операнда для работы,
но в большинстве случаев -
также работает как бинарный.
Есть всего один тернарный оператор, который имеет 3 операнда. Он называется условный оператор, но так как есть всего один такой, большинство людей называют его тернарный оператор.
Условный оператор в Ruby
В целом это выглядит так:
CONDITION ? EVALUATE_IF_CONDITION_WAS_TRUE : EVALUATE_IF_CONDITION_WAS_FALSE
Выражение проверяет CONDITION
(условие). Если оно true
(истина), тогда работает код между ?
и :
, и возвращается результат.
Если CONDITION
(условие) ложно, тогда средняя часть пропускается и выполняется 3я часть, возвращая результат.
Пример с puts
В этом примере возвращаемое значение условного оператора передается в puts
filename = ARGV.shift
puts filename ? filename : 'No file given'
Пример с меньшим значением
В этом примере мы проверяем, какое из двух случайных значений меньше, и возвращаем его:
examples/ruby/smaller_ternary.rb
x = rand()
y = rand()
puts x
puts y
smaller = x < y ? x : y;
puts smaller