9

多くのif-elseステートメント、特にネストされたif elseステートメントがあることがわかりました。これらのステートメントにより、コードが読みにくくなります。PHPでifelseステートメントの数を減らす方法は?

私のヒントは次のとおりです。1。適切な場合はswitchステートメントを使用します。2.実行可能な場合はexit()ステートメントを使用します。3.実行可能な場合は、3項ステートメントを使用します。

if elseステートメント、特にネストされたif-elseステートメントを減らすことができる他のヒントはありますか?

4

7 に答える 7

22

入れ子の深さを減らすために、可能な場合は「アーリーリターン」を使用するようにしてください。ブール式の評価を使用してみてください。

例:

function foo($param)
{
    $ret = false;

    if(userIsLoggedIn()) {
        if(is_array($param)) {
            if($param['count'] > 0) {
                $ret = true;
            }
            else {
                $ret = false;
            }
        }        
    }

    return $ret;
}

次のように書き直すことができます。

function foo($param) 
{
    if(!userIsLoggedIn()) return false;
    if(!is_array($param)) return false;
    return $param['count'] > 0;
}
于 2009-11-26T15:21:07.640 に答える
21

コードをより小さなワークユニットにリファクタリングします。条件付きロジックが多すぎるとコードの臭いが発生し、通常は関数をリファクタリングする必要があることを示します。

于 2009-11-26T15:08:09.060 に答える
11

Karnaughマッピングと呼ばれる、多くのif条件をリファクタリングおよび単純化するための公式の学術的方法があります。

if複数のテスト条件を取り入れ、必要なすべてのケースをカバーする簡略化されたステートメントの作成を支援しようとします。

あなたはここのウィキからそれについてもっと学ぶことができます。

于 2011-09-30T02:20:58.417 に答える
3

三項演算子を使用し、コードをリファクタリングし、elseステートメントで必要なすべてを実行する関数またはクラスを記述します。

于 2009-11-26T15:11:16.490 に答える
3

私は、進化し続けるビジネスロジックでいっぱいで、1日おきに変更する必要のある多くのコードに取り組んでいます。変更についていくのに確かに役立った2つのヒントは、他のすべてのステートメントを避け、できるだけ早く戻る/終了することです。深い入れ子にならないでください->サブルーチン/関数を作成してください。

他のすべてのステートメントを否定されたifステートメントに置き換えると、コードが上から下に読みやすくなります(条件とコードブロックの近接性)。

# business logic block
if ( $condition ) {
    # do something
    # code code code
} else {
    # code code code
    return;
}

# refactored:
if ( ! $contition ) {
    # code code code
    return;
}
if ( $condition ) {
    # code code code 
}

第二に、できるだけ早く戻る/終了します。もちろん私の意見ですが、サブルーチンの結果をすでに決定した後、特にコードを上から下まで読みたい場合は、追加の条件/テストを実行する意味がわかりません。すべてのあいまいさを取り除くと、物事が簡単になります。

結論として、私は特にBLの長いリストでelseを使用することを避けたいと思います。結果がわかったらすぐに戻ってください。ネストレベルが2を超える場合は、サブルーチン/関数を作成します。

于 2011-10-01T15:41:53.500 に答える
1

ポリモーフィズムもいくつかを取り除くことができますが、タイプセーフではないため、PHPでif/elseを減らすために実装するのは困難です...

于 2009-11-26T15:20:42.060 に答える
0

ternary operator次のように使用するか、次のようにすることで、if/elseコードの数を減らすことができますnull coalescing operator

三項演算子の使用: Variable = (Condition) ? (Statement1) : (Statement2);

$age = 20;
  print ($age >= 18) ? "Adult" : "Not Adult";

出力: Adult

null合体演算子を使用することにより:

// fetch the value of $_GET['user'] and returns 'not passed'
   // if username is not passed
   $username = $_GET['username'] ?? 'not passed';
   print($username);
   print("<br/>");

   // Equivalent code using ternary operator
   $username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
   print($username);
   print("<br/>");
   // Chaining ?? operation
   $username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
   print($username);

出力:

not passed 
not passed 
not passed 
于 2022-02-15T06:35:49.310 に答える