PHP プログラミング

phpコードを読み手にわかりやすく書く![AND OR編]

 

プログラミングをしていると、ifや、forなど、基本的な構文をよく利用する場面に出くわしますよね。

ある条件を満たせば、次の処理を走らせる場合など、その条件自体が、複雑怪奇になる場合も多々あります。

 

複雑になりやすい条件などを、後から自身で見直す時や、レビューしてくれる人に分かりやすく伝えるために、コードは書きたいものです。

今回はAND OR編として、「読みやすいコード」を少し深堀してみましょう。

 

if構文でORとANDが入り乱れる場合

まず、ORANDの判定が入り乱れる場合は ()(カッコ) を付けた方が読み手に優しく意図しない判定での事故が減ります。

例えば、以下のif文三つのORとANDが入るだけで既に読み手にわかりにくくなりやすいです。

 code
if (A && B) || (A && C) || (A && D) {
  // 条件をみたせば処理が走る
}

この条件を解説すると、「AとBが共にTrue(&&)、または(OR)、AとCが共にTrue、または、AとDが共にTrueである場合、処理を走らせる」(この時点で、もーややこいわ汗)

後から自身が見直したり、特に読み手にとってはぱっと見は分かりづらいです。

 

読み手により短い時間で伝えるには、

  • どういった判定なのか
  • なぜこの判定をしているのか

のコメントが欲しいところ。



その場合は、下記のように改行しちゃいましょう。

 code
例) Aを「雑種」、それ以外を「動物の種類」とする。
if (
    (A && B) // 雑種でイヌ
    || (A && C) // または雑種でネコ
    || (A && D) // または雑種でウサギ
) : // その場合はブロック表示

これで、各行ずつ、コメント付きで「何の条件で満たすのか」が明確になりました。

個人的感覚ですが「または(OR)」もさほど頭で考える必要もないかと。

 

AND ORをシンプルに書く

ちなみに、この判定自体は下記のように置き換えられます。

 code
if (A // 動物種が雑種
  && (B || C || D)) : // かつ(イヌ・ネコ・ウサギ)のいずれかの場合
// 処理や表示

「A」の部分は一つにまとめてしまって、違いは動物の種類しかないので、まとめてORさせる書き方も可能なんですね。

より、シンプルになり、改行を挟むことによって、動物の種類にフォーカスすることができました。

 

関数を使って条件をシンプルに

関数を使えばよりスマート?に置き換えることが可能です。各ペットのデータ型が配列の場合in_array でまとめて判定もできます。(その場合は ()(カッコ) 無くても読み間違えない )

以下のプロパティ名、hybridが「雑種」、pet_idが「各動物種類ID」とした。

 code
// 雑種かつ(イヌ・ネコ・ウサギ)のいずれかの場合
if ($hoge->hybrid === 1 && in_array($hoge->pet_id, [10, 20, 30])) : 

同じ目的の処理でも、ずいぶん違う書き方ができます。

データ型によっては、関数を利用してよりスマートに書くことができますね。

 

PHP:演算子の優先順位
https://www.php.net/manual/ja/language.operators.precedence.php

 

最後に

とはいえ、プログラミングを始めて間もない人?には、ある程度コードに書き慣れて熟練するまでは、そこまで多方面での意図を持って実装する必要はないかと。(逆にプログラムを書けなくなる説・・)

とりあえずは、「自分が期待(やりたい)ことは何か?」を明確にし、期待する結果が得られてから、ソースコードの見やすさ、違う側面からの意図などに考慮し、改良(リファクタリング)していけばよいのかなと思いますYO!。

 

 

-PHP, プログラミング
-

© 2021 FuwaFuwaShoChan BLOG