Others2 - Shimoheihe/Avant-garde-Java GitHub Wiki

Tertiary Operator VS IF statement

さて、間違いやすいところを1つご紹介します。

hikakuif
ふむ。処理としては同じような気がします。 というか3項演算子の説明としてよくこういうソースコードが出される気がします。
ただし、こちらは一目瞭然そう!if文ですね。
if文と3項演算子を考えるとき、まず注目しなくてはいけないのが"文"と"演算子"の違いです。
if文は制御構文なので、処理を分岐させるというものです。
それに対して3項演算子は"演算子"と名前が付いているように処理分岐を行うためのものではないのです。
明確な使い分けをしましょう。

if文は処理の分岐を行う場合に使います。 三項演算子は2つ(もしくはそれ以上)の中から一つを選択するという処理を行う場合に使います。
上記のような例だと"MAX"or"そのまま"を選ぶ処理なので、三項演算子が適しており、結果としてif文で書くよりもシンプルで短くなります。 逆に短く書きたいから三項演算子を使う、というのは本末転倒なわけです。

混乱される原因

「3項演算子は可読性が悪い」と言われ、嫌われる原因は結局のところif文の代わりに三項演算子を使ってしまっている悪いパターンが蔓延しているからです。3項演算子の中に"処理"を書いてしまうとif文でいいじゃんという話になってしまいます。

まとめ

役割を明確にして使い分ければ、読み手にもコードの意図が伝わるので可読性は良くなるはずです。 しかしどこまでを"演算"にしてどこからが"分岐処理"なのかという線引は作るプログラムの目的だったりプログラマーのセンスだったりも大いに関わってくるため難しい問題だとは思います。皆さんは優秀な方々なので自身の思うセンスで捌いてうまく対処して良いプログラマーになってください。

prev

3.Arithmetic processing
4.Conditional branching
Home