LoginSignup
55
46

More than 5 years have passed since last update.

条件式が複数ある三項演算子に混乱した話

Last updated at Posted at 2018-07-26

問題となったコード

突然、下のようなコードが出てきて、なんじゃこりゃってなった話です。

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を合わせると、かなり行数が少なく表現できるので、かなり気に入っています。

ただ、コードレビューのときに三項演算子ばかり使っていると「可読性が低くない?」って言われてしまいます。
どうしたらいいものやら…となっています。

55
46
4

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
55
46