0Pricing
Java Academy · レッスン

可読性を損なう落とし穴

式を分かりやすく保ちます。

「可読性を損なう落とし穴」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。

強力さが可読性を損なうことがあります

三項演算子は簡潔ですが、使いすぎるとコードが難解になります。

目標は文字数を最小にすることではなく、明快さです。一目で読み取れない1行は、いつバグになってもおかしくありません。

このレッスンでは、よくある落とし穴とその避け方を扱います。

落とし穴: 深いネスト

1行に多くの三項演算子を重ねると、読みにくく、間違えやすくなります。

レベルが1つ増えるごとに、ロジックを追うために必要な mental effort が増大します。

// hard to follow on one line
String g = s>=90?"A":s>=80?"B":s>=70?"C":s>=60?"D":"F";

改善策: if/else if を使う

分岐が多い場合は、長い連鎖よりも if/else if のラダー構造のほうが明快です。

各条件がそれぞれ独立した行になるため、見渡しやすく、デバッグも容易です。

String g;
if (s >= 90) g = "A";
else if (s >= 80) g = "B";
else if (s >= 70) g = "C";
else g = "F";

落とし穴: 括弧の不足

括弧を付けずに三項演算子と + を組み合わせると、意味が変わります。

+ は ?: よりも強く結合するため、連結によって条件や値の一部まで取り込まれることがあります。

int n = 5;
// surprising: + groups before ?:
String out = "n is " + n > 3 ? "big" : "small"; // does NOT compile as intended

改善策: 三項演算子を括弧で囲む

文字列の連結の中で三項演算子を使う場合は、必ず括弧で囲んでください。

こうすると境界が明確になり、期待どおりの結果が得られます。

public class Main {
    public static void main(String[] args) {
        int n = 5;
        String out = "n is " + (n > 3 ? "big" : "small");
        System.out.println(out);
    }
}

落とし穴: 内部の副作用

両方の分岐に副作用のあるメソッド呼び出しを置くと、何が実行されるか分かりにくくなります。

一目ではどの呼び出しが実行されるか分かりにくく、実際に実行されるのは常に一方の分岐だけです。

処理が重要な場合は if/else を優先してください。

// unclear which side effect happens
boolean ok = check();
int r = ok ? save() : rollback();

落とし穴: 長い分岐値

true 側または false 側の値が長い式になると、三項演算子が大量のテキストの壁になってしまいます。

まず複雑な部分式を名前付き変数に取り出し、その後で短い三項演算子を使ってください。

// cramped
double total = vip ? base*0.8 + tax + ship - coupon : base + tax + ship;

改善策: 中間値に名前を付ける

小計を取り出すと、どちらを選ぶのかが明確になり、コード自体が説明になります。

これで三項演算子が自然言語のように読めるようになります。

public class Main {
    public static void main(String[] args) {
        boolean vip = true;
        double regular = 100.0, discounted = 80.0;
        double total = vip ? discounted : regular;
        System.out.println(total);
    }
}

落とし穴: Boolean の冗長性

flag ? true : false と書く必要はありません。条件自体がすでに boolean 値だからです。

条件をそのまま使ってください。同様に、flag ? false : true は単に !flag と書けます。

boolean active = user != null;
// not: user != null ? true : false
boolean inactive = user == null;

複数行の三項演算子を整形する

三項演算子を残す必要がある場合は、整形すると読みやすくなります。? と : を行頭に置き、位置をそろえてください。

こうすると連鎖が、読みやすい条件のラダー構造になります。

String tier = points >= 1000 ? "gold"
            : points >= 500  ? "silver"
            : "bronze";

可読性チェックリスト

三項演算子を確定する前に、次の点を確認してください。単純な1つの選択になっていますか。型に互換性がありますか。括弧は明確ですか。

どれか1つでも答えが「いいえ」なら、if/else を使うか変数を取り出してください。巧妙なコードより、読みやすいコードのほうが優れています。

クイックチェック

より読みやすい書き換えを見つけてください。

まとめ

三項演算子が役立つのは、単純なまま保たれている場合だけです。深いネスト、括弧の不足、副作用、Boolean の冗長性を避けてください。

複雑な値は名前付き変数に取り出し、長い連鎖はラダー構造として整形してください。

迷ったら、最も明快に読める形式を選んでください。

よくある質問

「可読性を損なう落とし穴」レッスンは無料ですか?

はい。「可読性を損なう落とし穴」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。

「可読性を損なう落とし穴」で何を学びますか?

式を分かりやすく保ちます。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「可読性を損なう落とし穴」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 三項演算子
  2. 三項演算子のネスト
  3. 三項演算子とif/else
  4. 可読性を損なう落とし穴
← Java Academyに戻る