こんにちは!
ナビゲータのEVEです。
本日は、私が以前苦手だと話していた、 三項演算子 についてお話をします。苦手というか、今回のプロジェクトから利用しようとしているので、慣れていないだけなのかもしれませんが・・・。
[三項演算子]
三項演算子とはなんでしょうか? ChatGPT に解説をしてもらいましょう!
三項演算子(または三項条件演算子)とは、条件に基づいて値を選択するための演算子で、3つのオペランドを持つことから「三項」と呼ばれています。PHPを含む多くのプログラミング言語で利用されます。
三項演算子の基本的な構文は以下の通りです:
?(condition) ?? value_if_true :? value_if_false;
?condition: 真偽値を評価する式。
?value_if_true: 条件が true の場合に返される値。
?value_if_false: 条件が false の場合に返される値。
以上を読んでなんだ簡単だって思いました?確かに以上の文書を読むとそうなのですが、実際に使うとそうでもありません。普通conditionには式が入り、その結果により返却値が真または偽と評価されるのですが、その結果を区別するのに、最初苦労しました。ChatGPTに聴いたところ、値を真なのか偽なのか区別するための基準があるようなので、解説してもらいましょう!
1)Boolean:
true: 明示的に真を示す値。
2)整数:
1 以上の整数: 例えば、1, 2, 100 など。
3)浮動小数点数:
正の0より大きいの浮動小数点。
4)文字列:
非空の文字列: 例えば、'Hello', '0.0', 'false' など、内容がある文字列は真と評価されます。
5)配列:
非空の配列: 例えば、[1], ['a', 'b'], [1, 2, 3] など、要素を持つ配列は真と評価されます。
6)オブジェクト:
PHPでは、多くのオブジェクトは、真と評価されます。
続けて偽について見てみましょう!
1)Boolean:
false: 明示的に偽を示す値。
2)Null:
null: 値が存在しないことを示します。
3)整数:
0: ゼロは偽とみなされます。
4)浮動小数点数:
ゼロ、負の浮動小数点。
5)空の文字列:
'': 空文字列は偽です。
6)文字列 '0':
'0': 文字列のゼロも偽と判断されます。
7)空の配列:
[]: 要素を持たない配列は偽とみなされます。
8)オブジェクト:
オブジェクトの状態: PHPでは、オブジェクト自体は常に真と評価されますが、オブジェクトのプロパティやメソッドが偽と評価される場合、そのオブジェクトが特定の条件を満たさない限り、偽として扱われることがあります。
初心者は、評価する式から得られた結果が、真か偽かという時点で戸惑ってしまい、プログラミングの手が留まってしまいます。ただ、以上のように整理し、見ながらだったらプログラミングができそうです。
[評価する式の値をそのまま返す]
conditionには、評価する式が入ると話しましたが、判定するのは評価する式から得られた結果です。その結果が以上の分類により真なのか偽なのか判断します。その判定した結果が真ならvalue_if_trueが返却され、偽ならvalue_if_falseが返却されます。ただ、そのvalue_if_true、value_if_falseに値を設定しなくても、三項演算子を利用することができます。それは、評価する式が真で、value_if_trueに何も設定されていない場合は、評価する式の返却値がそのまま返却されます。以前、メソッドの返却値を三項演算子で記述すれば短くなり、便利だと話した記憶がありますが、それが理由です。
[null合体演算子]
三項演算子を使った特殊な方法があります。それが、 null合体演算子 と言われるものです。では、null合体演算子とは何なのか、ChatGPTに解説してもらいましょう!
null合体演算子(Null Coalescing Operator)は、PHP 7以降で導入された便利な演算子です。この演算子は、特に変数が null かどうかをチェックする際に使われます。以下に詳しく説明します。
$result = $value1 ?? $value2;
この例では、$value1 が null でない場合、その値が $result に代入されます。もし $value1 が null であれば、$value2 の値が $result に代入されます。
null合体演算子は、nullに特化した三項演算子なので、使用するシーンが明確に思い浮かびます。ただ、当プロジェクトは基本、クラス、メソッドの変数は、その頭で初期化してから利用するので、あまり出番がないかもしれません。
[あとがき]
近頃、プログラミングする場合、できるだけシンプルに行数を少なく記述しようと考えています。三項演算子は、その目的にあった方法で、利用できるところは、三項演算子を利用しようとしています。ただ、三項演算子を1つの式に、多重で利用するのはやめようと考えています。パット見た目シンプルなのですが、よくよく見ると複雑で見て悩むということが考えられるからです。その場合、バグを作りこむ機会となるうえ、作業効率を下げそうです。
PHPは複雑にプログラミングしようとすれば、かなり複雑にすることができます。当プロジェクトでは、できるだけシンプルに作るのですが、他のプロジェクトではどうなのでしょうか?プログラムを受注することを考えると、ちょっと、ドキドキしてきます。まっ、みんなやっていることですからね。がんばります。
では、また!