LoginSignup
3
0

More than 3 years have passed since last update.

三項演算子を書く基準

Last updated at Posted at 2019-06-29

初めに

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の場合の処理です。
waiyomeの順位の高い方の処理を、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行でまとめることができるので、少ない行数でコードを実現できます。
しかし、自分がわかっても、他人がコードレビューした時に分かりづらければ、意味がないのです。
他人の気持ちになって、可読性を心がけるよう自身も含め気をつけていきたいです!

3
0
0

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
3
0