眼鏡ケースに指を挟んで内出血したmizkyです。
条件分岐を三項演算子で書いているときに、思ったことがあります。
三項演算子で書く意味ある?????
個人的に三項演算子を使用した条件分岐は読みにくいんですよね。。。
if文の方が見やすいと思っている人の方が多い気がします(場合にもよりますが)。
なので、今回は条件分岐の際にif文と三項演算子のどちらを使用したほうがいいのかまとめました。
1. 可読性(コードの読みやすさ)
どう考えても(特に初心者にとっては)三項演算子よりif文の方が圧倒的にコードが読みやすいです。
if x > 100:
y = x - 100
else:
y = x + 100
if文による条件分岐です。
xが100以上の時はマイナス100をしてyに代入、それ以外はプラス100してyに代入するコードです。
小学5年生でも分かりそうです。
これを三項演算子で書くと
y = x - 100 if x > 100 else x + 100
こうなります。おそらくこれは小学5年生では分かりません。
一瞬何がしたいのか理解できません。私だけですかね。
2. elseが無い場合
if x > 100:
y = x - 100
if文はelseが無くても処理が実行されます。
対して三項演算子ですが
>>> y = x - 100 if x > 100
File "<stdin>", line 1
y = x - 100 if x > 100
^
SyntaxError: invalid syntax
SyntaxErrorです。
三項演算子でif文を書く場合は、
必ずifがFalseだった場合の値について定義しないといけないようです。
3. 複雑な条件分岐
if x > 10:
if x > 20 and y > 30:
z = x + y
elif x > 15 and y > 20:
z = x * y
else:
z = x ** y
else:
if 0 < x < 5:
z = x - y
else:
pass
このように、if文は複雑な条件分岐を行うことができます。
三項演算子を用いてこのような複雑な分岐を書くことはできません。
書けたとしても難解すぎて誰も読もうとしないと思います。
4. 行数
少し可読性と被るところはあるかもしれませんが、、、
1. 可読性のところのコードを比較してみると
if文が4行で書けるところを、三項演算子は1行で書けます。
もっとも行数が少ないからと言って、読みやすいかどうかは別だと思いますが。。。

お前さっきから三項演算子disりすぎじゃない?
正直、ここまで見ると三項演算子を使用するメリットってなくね?となりますが、私はふと思いました。
処理に関しては三項演算子の方が速いのでは? と。
処理時間(パフォーマンス)
処理時間(パフォーマンス)については別記事にて調査しました。
結論から言うと、三項演算子よりもif文の方が処理時間が僅かに速い(パフォーマンスが良い)です。
ただし、ほとんど誤差の範囲内なので気にする必要はないかと思います。
結論
特に1行で書く必要ない場合は、三項演算子よりもif文で書いた方が良さそうです。

「mizky」で「みずき」と読みます。エンターテイナーになりたい。普段はサラリーマン(気持ちは引き篭もりニート)。アプリ開発、HP運営、投資など手広くやっております。九州大学大学院卒業。趣味は旅行、レースゲーム。
コメント