初めに
Rubyを含む色々な言語を学習する上で三項演算子という名前が出てくる。
これを使うと条件文をお手軽に1行に収める事が出来るが、使うべきではない時もある
どういう時に使うの?
・条件 and 処理
がわかりやすい時は使ってもいいよ。
・条件 or 処理
が複雑な時は使わない方がいいよ。
・初学者は使わないほうが無難だと思うよ。
どういう風に使うの?
例えば、家庭内の権力順位
を表す条件文を作るとしましょう。
上にif文、下に三項演算子の形で記載していきます。
if 〜 else 〜 endの場合
wai = 2
yome = 1
rank =
if wai < yome
'wai'
else
'yome'
end
rank = wai < yome ? 'wai' : 'yome'
三項演算子の形式でも、ぱっと見で分かりますね。
この場合だと、三項演算子の方が行数も少なく、オススメと言えるでしょう。
ちなみに、条件文
? trueの場合の処理
: falseの場合の処理
です。
waiとyomeの順位の高い方の処理を、rank変数に代入するよという意味です。
if 〜 elsif 〜 else 〜 endの場合
wai = 3
yome = 2
musuko = 1
rank =
if wai < yome
'wai'
elsif musuko < yome
'musuko'
else
'yome'
end
rank = wai < yome ? 'wai' : musuko < yome ? 'musuko' : 'yome'
if文だとどう処理をするのかわかりやすいのに、三項演算子の方は分かりづらくなってしまいました。
rank = 条件文1
? trueの時は'wai'を代入
: falseの時は条件文2
? trueの時は'musuko'を代入
: falseの時は'yome'を代入
という事をしています。
# 条件文の位置で揃えた場合
rank = wai < yome ? 'wai'
: musuko < yome ? 'musuko' : 'yome'
# true / falseの条件の位置で揃えた場合
rank = wai < yome ? 'wai' : musuko < yome
? 'musuko' : 'yome'
このように2行にすれば、1行の時より多少見やすいですが、if文の方が可読性が高く、読み間違いが少ないと言えるでしょう。
if 〜 elsif 〜 elsif 〜 else 〜 endの場合
ここまでくればお分かりだと思いますが、やってみましょう!
wai = 4
yome = 2
musuko = 2
musume = 1
rank =
if wai < yome
'wai'
elsif musuko < yome
'musuko'
elsif musume < musuko
'musume'
else
'yome'
end
rank = wai < yome ? 'wai' : musuko < yome ? 'musuko' : musume < musuko ? 'musume' : 'yome'
if文だと処理を追いかけるのが簡単なのに対し、三項演算子は考えるだけでうんざりですね?
最後に
三項演算子は上手く使えば、処理を1行でまとめることができるので、少ない行数でコードを実現できます。
しかし、自分がわかっても、他人がコードレビューした時に分かりづらければ、意味がないのです。
他人の気持ちになって、可読性を心がけるよう自身も含め気をつけていきたいです!