Elixirでの三項演算子の書き方
Elixirでは三項演算子が用意されていません。
色々書き方がありますが、個人的にはif/elseワンライナーを使うのがベターかと思います
if/elseのワンライナー
if/elseのワンライナー。
Elixirのif/elseワンライナーのシンタックスはカンマ・コロンがごちゃごちゃしていてパット見たときの視認性はかなり悪いです。つまり、見づらいです。
result = if 2 == 2, do: 'ok', else: 'ng'
# カンマ(,)と、コロン(:)の位置に注意です
if/else
三項演算子というか、そのままif/else。複数行の処理や、ワンライナーが見にくいならこちらを。
result =
if 2 ==2 do
'ok'
else
'ng'
end
unless/else
if/else・if/elseワンライナーと同じシンタックスなので省略です。
case
caseで分岐。関数型の原理主義的な人はifを使わないでcaseだけで記述するイメージ。個人的には、条件式がboolならif/elseのほうが良い気がします。
result = case 2 == 2 do
true -> 'ok'
_ -> 'ng'
end
ハックな書き方(個人的に非推奨)
TwitterからStackoverflowに流れてきた書き方を見つけました。
こなれた書き方ですが、読みにくいです。
なにより、returnする値がbool/nilだと三項演算子として機能しないケースもあり、この書き方はバグの温床になります。
result = 2 == 2 && 'ok' || 'ng'
# => ok
result = 2 == 2 && nil || true
# => nilではなくて、trueが返る
まとめ
「三項演算子ってどうやって書くんだっけ?」を忘れてたのでまとめようとしてたら、ただただ条件分岐を網羅するだけの記事になってしまった。
Elixirの三項演算子ではif/elseワンライナーを使ってください。
その他
if/elseの中では極力代入(束縛)しないほうがスマートになるはずです。
# 良くない書き方
# 'result =' は外に出して上げたほうが良い
if 2 ==2 do
result = 'ok'
else
result = 'ng'
end