Официальное название оператора ? : это условный оператор, хотя большинство людей знают его как тернарный оператор, указывая на количество его операндов.

Есть несколько унарных операторов (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