問題となったコード
突然、下のようなコードが出てきて、なんじゃこりゃってなった話です。
String str = 条件式1 ? 条件式2 ? "A" : "B" : "C";
これがどういう動きになるかと、簡単に表にすると、
条件式1 | 条件式2 | 出力結果 |
---|---|---|
true | true | A |
true | false | B |
false | false | C |
false | true | C |
まとめてみたら分かったのですが、混乱してしまいました。
括弧を入れて見やすくしてみた
複数の条件式が記述されている三項演算子は、全く見慣れていないです。
自分にも読みやすいように括弧を入れてみます。
String str = 条件式1 ? (条件式2 ? "A" : "B") : "C";
これですこし見やすくなりました。
今度似たようなコードを見たら、(心の中で)括弧をつけろよ!と指摘することにします。
if~else文に書き換えてみた
結局if~else文に書き換えてみれば、一番わかりやすかったです。
String str = "";
if (条件式1) {
if (条件式2) {
str = "A";
} else {
str = "B";
}
} else {
str = "C";
}
if~elseで表現すると、どうしても行数が多くなってしまいます。
なので、三項演算子のほうがスマートに書くことができている気がします。
改行を入れて見やすくしてみた
コメントにて教えていただいた方法です。
括弧ではなく、改行を入れてみます。
String str = 条件式1
? 条件式2 ? "A" : "B"
: "C";
三項演算子を1行で書いてしまうことが多いですが、条件が複数ある場合に限り、複数行で表現するほうが良いかもしれません。
括弧より見やすくなった気がします。※ あくまで個人的な感覚ですが…
条件分岐を書き直してみた
こちらもコメントにて教えていただいた方法です。
条件を見直して見やすくしています。
String str = !条件式1 ? "C" : 条件式2 ? "A" : "B";
これをさらに改行すると、
String str =
!条件式1 ? "C"
: 条件式2 ? "A"
: "B";
最初の三項演算子や、if~else文に比べるとかなり見やすくなりました。
雑感
最近は、積極的に三項演算子を活用するようにしています。
そこにラムダ式やStream APIを合わせると、かなり行数が少なく表現できるので、かなり気に入っています。
ただ、コードレビューのときに三項演算子ばかり使っていると「可読性が低くない?」って言われてしまいます。
どうしたらいいものやら…となっています。