三項演算子は使うべきか?使わないほうがいいか?


三項演算子とは、一般的には

bool flag = true;
int point;
if(flag == true){
  point = 100;
}else{
  point = 0;
}

のようなコードを

bool flag = true;
int point = (flag == true) ? 100 : 0;

のように1行で表せる書き方だが、上のコードと下のコードではどちらが良いコードだろうか?
良いコードとは何かを考えるのに、シンプルだが良いテーマだと思うので、自分で考えたり、周りの人と議論してみてはいかがだろうか。
上記の例は説明のために単純なものになっているので、三項演算子を使ったほうが簡潔だが、もう少し複雑な例になると素直にif文で分岐させたほうが分かりやすいときもあるのではないだろうか。
パッと見て分かりやすいのは上だと感じる。また、trueの時、falseの時の処理が増えた場合に対応しやすいのは上の方のコードだ。最初にコードを書いてからしばらく経った後に修正する可能性がある場合は、保守性を考えてあえて三項演算子を使わないという選択もありうる。
個人的には、このくらいの例ならば三項演算子を使っても使わなくてもどちらでも良い。使った場合、使わない場合どちらにも良さはあり、人それぞれで良いと思うし、コーディング規約などで縛るほどでもないと思う。

やめてほしい三項演算子の使い方

ただし、以下のような三項演算子が入れ子になっている書き方は、分岐が分かりにくいのでやめたほうがいいと思う。
はっきりと「三項演算子の入れ子は禁止」とコーディング規約にしてしまっても良いくらいだと思う。

bool flag1 = true;
bool flag2 = false;
bool flag3 = false;
int point = flag1 ? 100 : 
            flag2 ? 50 :
            flag3 ? 25 :
            0;

このように改行すれば、まぁ読めるが、改行が無ければ何が何だかわからない。こういう分かりにくい表現をあえてするのはあまりスマートではないので、できればやめてほしい。


Programming Blog