Avec l'opérateur Ruby ternaire, nous pouvons écrire la logique suivante pour une construction simple if else:
a = true ? 'a' : 'b' #=> "a"
Mais si je voulais écrire ceci comme if foo 'a' elsif bar 'b' else 'c'
?
Je pourrais l'écrire comme suit, mais c'est un peu difficile à suivre:
foo = true
a = foo ? 'a' : (bar ? 'b' : 'c') #=> "a"
foo = false
bar = true
a = foo ? 'a' : (bar ? 'b' : 'c') #=> "b"
Existe-t-il de meilleures options pour gérer un tel scénario ou est-ce notre meilleur choix si nous souhaitons condenser la logique if..elsif..else en une seule ligne?
a = (foo && "a" or bar && "b" or "c")
ou
a = ("a" if foo) || ("b" if bar) || "c"
Le Github Ruby Styleguide recommande que l'un des liners soit réservé pour les instructions triviales if/else et que les opérateurs ternaires imbriqués soient évités. Vous pouvez utiliser le then
mot clé, mais son considéré comme une mauvaise pratique.
if foo then 'a' elsif bar then 'b' else 'c' end
Vous pouvez utiliser des cas (opérateur de commutateur Ruby) si vous trouvez vos instructions de contrôle trop complexes.
a = if foo then 'a' elsif bar then 'b' else 'c' end
Vous pouvez également écrire:
x = if foo then 'a' elsif bar then 'b' else 'c' end
Cependant, ce formatage n'est pas idiomatique dans Ruby.