Причина, по которой условный оператор необходим в C, заключается в том, что условный оператор, в общем, является оператором, то есть он не (и не может) возвращать значение. Итак, если вы хотите вернуть значение из условного кода, вам не повезло. Вот почему необходимо было добавить условный оператор: это выражение, то есть оно возвращает значение.
В Ruby, однако, условный оператор совершенно лишний, потому что в любом случае в Ruby нет операторов. Все является выражением. В частности, в Ruby нет оператора if
, есть только выражение if
.
И так как if
в любом случае является выражением, вы можете просто использовать его вместо загадочного условного оператора:
some_method( if x.predicate? then foo else bar end )
Единственное, что вы должны помнить, это то, что предикат должен заканчиваться либо новой строкой, точкой с запятой, либо then
. Итак, первые три раза вы это сделаете, вы превратитесь
if cond
foo
else
bar
end
в
if cond foo else bar end
и удивляюсь, почему это не работает. Но после этого then
(или точка с запятой) придет естественным образом:
if cond; foo else bar end
if cond then foo else bar end