6
2

More than 3 years have passed since last update.

Elixirでの三項演算子の書き方

Posted at

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

REF

6
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2