【PHP】三項演算子 – 読みやすいコードを書こう!メリット・デメリットも解説

ソースコードは開発者にとって読みやすく、理解できるよう作成することが大切とされています。

多岐に渡るif文などは読みづらくなる傾向にあるので、少しでも分かりやすいコードにするよう、1部のif文は三項演算子と呼ばれる方法を使って綺麗に書くことが望ましい場合があります。

この方法を使えば比較的早くプログラムを作ることもできますので、是非習得していきましょう。

★ 目的

  • 三項演算子を使えるようになる。

三項演算子とは

三項演算子は条件式の真偽に応じてデータを返す演算子です。

if文に似ていますが、三項演算子は代入演算子と併用して使われることが多く、真偽値に応じて変数に代入するデータを分岐させることができます。

三項演算子の構文

三項演算子の構文は次のようになります。

条件式 ? データ(真の場合) : データ(偽の場合)

条件式は最終的に真偽値となれば良いので、変数や論理式を使用することができます。また、データは変数や数式を記述できます。

三項演算子の使用例

とあるお会計でプレミア会員のみ10%割引するプログラムを例に見ていきましょう。

ソースコード

<?php

// 会員ランク - プレミア = PREMIER / 一般 = GENERAL
$member_rank = 'PREMIER';
// 割引率
$discount_rate = $member_rank == 'PREMIER' ? 10 : 0;
// 料金
$price = 1500;
// 割引適用後の料金
$total = $price - $price * $discount_rate / 100;
// 割引率の出力
echo "会員の割引率は${discount_rate}%です。\n";
echo "割引適用後の料金は${total}円です。\n";

?>

実行結果

会員の割引率は10%です。
割引適用後の料金は1350円です。

6行目の割引率の代入で三項演算子を使用しています。初めに$member_rank == ‘PREMIER’の真偽を判定し、ここでは真(true)のため、10という数値が$discount_rateに代入されます。

その後、料金の計算を行い、結果を出力しています。

会員ランクの$member_rankに一般会員を示す’GENERAL’など違う文字列を代入すると、割引率が0%になるので、是非試してみてください。

if文との比較

上記例をif文で記述した場合は次のようになります。

ソースコード

<?php

// 会員ランク - プレミア = PREMIER / 一般 = GENERAL
$member_rank = 'PREMIER';
// 割引率
$discount_rate = null;
if( $member_rank == 'PREMIER' ) {
    $discount_rate = 10;
} else {
    $discount_rate = 0;
};
// 料金
$price = 1500;
// 割引適用後の料金
$total = $price - $price * $discount_rate / 100;
// 割引率の出力
echo "会員の割引率は${discount_rate}%です。\n";
echo "割引適用後の料金は${total}円です。\n";

?>

1行で完結していた記述が6行になりました。読む量が増えるので、三項演算子の方が可読性が上がり分かりやすくなることを感じていただけたのではないでしょうか。

逆に三項演算子よりif文が好ましい場合は3つ以上に分岐する時になります。

会員ランクに特別会員(SPECIAL)を追加した場合の例で見ていきましょう。

なお、ここからは本記事を見やすくするため、割引率の判定のみのコードを記載します。

if文の場合

ソースコード

<?php

// 会員ランク - プレミア = PREMIER / 一般 = GENERAL / 特別会員 = SPECIAL
$member_rank = 'SPECIAL';
// 割引率
$discount_rate = null;
if( $member_rank == 'PREMIER' ) {
    $discount_rate = 10;
} else if( $member_rank == 'SPECIAL' ) {
    $discount_rate = 20;
} else {
    $discount_rate = 0;
};

?>

三項演算子の場合

ソースコード

<?php

// 会員ランク - プレミア = PREMIER / 一般 = GENERAL / 特別会員 = SPECIAL
$member_rank = 'SPECIAL';
// 割引率
$discount_rate = $member_rank == 'PREMIER' ? 10 : ( $member_rank == 'SPECIAL' ? 20 : 0 );

?>

三項演算子の方が読みづらくなったように感じる方が多いかと思います。

このように処理によって得意不得意があるので、変数に代入する値を2分岐させたいときは三項演算子、3つ以上に分岐させたい時はif文として利用すると良いでしょう。

まとめ

三項演算子について解説しました。三項演算子はメリットを理解して、使うことでコードを読みやすくすることができます。分かりやすいソースコードは他の人のためだけではなく、自分が後から読み返してプログラムを修正するためにも役立ちますので是非、習得してみてください。