三項演算子 〜プログラム研究室〜



 ナビゲータのEVEです。
プログラミング.jpg
 本日は、私が以前苦手だと話していた、 三項演算子 についてお話をします。苦手というか、今回のプロジェクトから利用しようとしているので、慣れていないだけなのかもしれませんが・・・。

[三項演算子]
 三項演算子とはなんでしょうか? 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は複雑にプログラミングしようとすれば、かなり複雑にすることができます。当プロジェクトでは、できるだけシンプルに作るのですが、他のプロジェクトではどうなのでしょうか?プログラムを受注することを考えると、ちょっと、ドキドキしてきます。まっ、みんなやっていることですからね。がんばります。

 では、また!

検索
<< 2024年11月 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。

2024年11月05日

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: