Voici une astuce qui n'est pas directement liée à votre question: en Ruby, il n'y a pas une telle chose comme un if
déclaration. En fait, en Ruby, il n'y a pas de déclarations à tous. Tout est une expression. Un if
expression renvoie la valeur de la dernière expression évaluée dans la direction qui a été prise.
Donc, il n'y a pas besoin de l'écrire
if condition
foo(something)
else
foo(something_else)
end
Ce serait mieux d'être écrite comme
foo(
if condition
something
else
something_else
end
)
Ou comme un one-liner
foo(if condition then something else something_else end)
Dans votre exemple:
something.meth(if val == 'hi' then 'hello' else 'right' end)
Remarque: Ruby a aussi un opérateur ternaire (condition ? then_branch : else_branch
) mais c'est totalement inutile et devrait être évitée. La seule raison pour laquelle l'opérateur ternaire est nécessaire dans des langages comme C est parce que C if
est une déclaration et ne peut donc pas renvoyer une valeur. Vous avez besoin de l'opérateur ternaire, parce que c'est une expression, et la seule façon de rétablir la valeur d'un conditionnel. Mais en Ruby, if
est déjà une expression, donc il n'y a vraiment pas besoin d'un opérateur ternaire.