0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

三項演算子を活用してコードを簡潔に:使いどころと注意点

Last updated at Posted at 2025-01-04

image.png

はじめに

三項演算子は、条件分岐を簡潔に記述するための便利なツールですが、使い方を誤ると可読性を損なう原因にもなります。特に、文字数が多い行や特殊な文字列が含まれる場合には考慮が必要です。この記事では、三項演算子の基本的な使い方、改善例、さらに特殊なケースでの注意点について解説します。


三項演算子の基本構文

三項演算子は以下のような構文で記述します:

条件式 ? 真の場合の値 : 偽の場合の値;

例:基本的な使い方

$evenOrOdd = ($number % 2 === 0) ? 'Even' : 'Odd';
  • 条件式: $number % 2 === 0 (偶数かどうか)
  • 真の場合の値: 'Even'
  • 偽の場合の値: 'Odd'

この例では、変数 $number が偶数の場合に 'Even'、そうでない場合に 'Odd'$isEven に代入されます。


冗長なループ処理の例

次に、三項演算子を使う前の冗長なコードを見てみましょう。

foreach ($products as $product) {
    if ($product['category'] === 'important') {
        $processedProducts[] = [
            'id' => $product['id'],
            'name' => $product['name'],
            'categoryLabel' => 'Special',
        ];
    } else {
        $processedProducts[] = [
            'id' => $product['id'],
            'name' => $product['name'],
            'categoryLabel' => 'Other',
        ];
    }
}

このコードには以下の課題があります:

  • 重複: processedProducts[] への追加処理が2回書かれている。
  • 読みにくさ: 同じ構造のコードが条件ごとに繰り返されており、意図が一目で理解しにくい。

三項演算子を使った改善例

同じ処理を三項演算子を使って簡潔に書き直すと、以下のようになります。

foreach ($products as $product) {
    $processedProducts[] = [
        'id' => $product['id'],
        'name' => $product['name'],
        'categoryLabel' => $product['category'] === 'important'
            ? 'Special'
            : 'Other',
    ];
}

改善ポイント:

  1. 重複の排除

    • processedProducts[] への追加処理が1箇所にまとめられました。
  2. 簡潔さ

    • categoryLabel の設定が三項演算子で簡潔に記述されています。
  3. 可読性の向上

    • 全体の構造がスリムになり、何をしているのかが直感的に理解できます。

三項演算子を使うときの注意点

1. 情報量が多い行での埋もれ

三項演算子は情報量が多い行に埋もれやすいという欠点があります。以下はその例です:

$results = array_map(fn($product) => "$product[name] (ID: $product[id]) is in category " . ($product['category'] === 'important' ? 'Special' : 'Other'), $products);

問題点:

  • 文字数が多い: 文字数が多い記述の中で三項演算子の ?: が埋もれ、視認性が低下しています。ここで三項演算子が使われていることが分かりにくいです。
  • ロジックの混在: 配列マッピング、文字列結合、条件分岐が一行に詰め込まれています。

特殊文字列との混同

三項演算子を含むコードで、同じく ?: を含む文字列を処理する場合、混同が発生しやすくなります。

悪い例

$results[] = "Condition: " . ($isConditionMet ? "Yes?" : "No:") . " Check details.";

問題点:

  • 混乱の原因: 三項演算子の ?: と、文字列内の ?: が混ざることで、コードを読む際に混乱を招きます。

三項演算子を使うときのポイント

  1. 条件が短い場合に限定

    • 三項演算子はシンプルな条件分岐に適用するのが最適です。
  2. 情報量が多い箇所での使用に注意

    • 情報量が多い行で三項演算子を使用することは避けるべきです。特に、文字数が多い変数名やメソッド名を含む処理では、三項演算子が埋もれてしまい、かえって可読性が低下します。三項演算子を書く以前に、変数名・メソッド名の改善を検討しましょう。
  3. 特殊文字列との併用を避ける

    • ?: を含む特殊な文字列を処理する場合は、三項演算子を使用すると混乱が生じやすいことに注意が必要です。

まとめ

三項演算子は、適切に使えばコードを簡潔にできる強力なツールですが、使用方法を誤ると可読性が低下する原因になります。

  • 短く単純な条件分岐には積極的に活用する。
  • 情報量が多い場合や特殊な文字列を扱う場合は慎重に利用する。

この記事を参考に、三項演算子を効果的に活用し、可読性と保守性の高いコードを目指してください!

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?