78423


配列やコレクションが入る変数の名前には接尾辞(サフィックス)として`"arr"`を付けるコーディングルールを採用しているとします。  
(`"arr"`でなく`"list"`でも複数形でもなんでも良いです)

もしスカラー型(整数や文字列など)を返すなら受ける変数名は単純にこうなります。

[code]

    $a = abc();
    
[/code]

配列を返すならこうなります。

[code]

    $aArr = abc();
    
[/code]

こんな感じで区別がついてわかりやすいです。

しかしスカラー型と配列のどちらも返る可能性がある場合、名前はどうするのがベストプラクティスなのでしょうか。

[code]

    function abc() {
        if () {
            return 1;
        } else {
            return [2, 3, 4];
        }
    }
    
[/code]

解決方法  
パターン１ `$a`で受ける  
パターン２ `$aArr`で受ける  
パターン３ 型を判別してスカラーなら`$a`、配列なら`$aArr`に振り分ける  
パターン４ 根本がおかしい。もっとこうするべき。

実際にパターン１で組んでるのですが強烈な違和感を感じています。  
パターン２も実際にやったことがあり違和感があります。  
パターン３は名前のためにこれをやるのは面倒くさいし保守性が悪くなります。

(タグは必ず一つ設定しないといけないのでphpにしておきました)


CC BY-SA 4.0
2021-07-27T06:27:43.267
78422
2021-07-27T07:30:14.613
2021-07-27T06:50:06.427
34267
34267
question
php
スカラー型と配列の両方が入る可能性のある変数の名前をどうするか


私自身はパターン４です。あえていうならばパターン3ともいえますが。

動的型付けな言語であっても基本的に動的に動作させるのは変数を受け取った直後や宣言した直後だけでそれ以外ではきちんと型を固定させるようにします。

さらに固定化させていない状態で処理をさせることはしないです。

例えばPOSTのデータを受け取る際に

[code]

    //stringで来る場合
    $name = $_POST["name"]?? "";
    if (is_string($name) === false) {
      //何らかのエラー処理
    }
    
    // 配列で来る場合
    $nameArr = $_POST["nameArr"]?? [];
    if (is_array($nameArr) === false) {
      //何らかのエラー処理
    }
    
[/code]

それぞれで固定させて後の処理を実行します。

仮に固定化させないで処理を実行すると本来配列でしかありえない処理を関数に渡してしまってエラーになることも想定されます。

[code]

    //この場合nameArrに配列以外が来るとエラーになる
    implode(",", $nameArr)
    
[/code]

配列とスカラーが混じった変数を返すぐらいであれば  
全部配列にして、配列前提の変数にしてしまうこともたびたびあります。

[code]

    function abc() {
        if () {
            return [1];
        } else {
            return [2, 3, 4];
        }
    }
    
[/code]


CC BY-SA 4.0
2021-07-27T07:14:51.747
78423
2021-07-27T07:30:14.613
2021-07-27T07:30:14.613
22665
22665
78422
answer