2009-11-26 11 views
7

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

私のヒントは次のとおりです。 1.適切な場合はswitch文を使用してください。 2.実行可能な場合は、exit()ステートメントを使用します。 3.可能であれば、3つのステートメントを使用します。

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

答えて

17

コードを小さな作業単位にリファクタリングします。余りにも多くの条件付きロジックはコード臭であり、通常、関数をリファクタリングする必要があることを示します。

3

3進演算子を使用してコードをリファクタリングし、必要な場合はすべてのelse文を実行する関数またはクラスを記述します。

1

難しく、それは安全で入力されていないとして、PHPでのif /他減らすために実装するallthough多型は、同様にいくつかを取り除くことができ...

19

は、可能な場合に順に「早期復帰」を使用するようにしてくださいネスティングの深さを減らす。ブール式の評価を使用してみてください。

例:

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

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

    return $ret; 
} 

あなたはこのように書き換えることができます:カルノーマップ呼ばif条件の多くをリファクタリングし、簡素化する公式の学術の方法は

function foo($param) 
{ 
    if(!userIsLoggedIn()) return false; 
    if(!is_array($param)) return false; 
    return $param['count'] > 0; 
} 
+0

+1ファイルサイズを数KB減らすことができるので、これは非常に重要です! – Xeoncross

+0

+1 continue、break、throwにも適用されます。サイクリックの複雑さを低く保ち、コードを読みやすくすることができます。 – NikiC

+5

また私は個人的に 'return userIsLoggedIn()&& is_array($ param)&& $ param ['count']> 0;'を個人的に使用します。それは短く簡潔です。 – NikiC

9

があります。

必要なすべてのケースをカバーする簡略化されたifステートメントを作成するのに役立つ複数のテスト条件と試行を行います。

詳細については、wiki hereからご覧ください。

1

私は進化するビジネスロジックでいっぱいであり、一日おきに変更する必要がある多くのコードを処理します。修正について私が確かに役立つ2つのヒントは、すべてのelse文を避け、できるだけ早く戻る/終了することです。絶対深いネスティングに入ることはありません - >サブルーチン/関数を作成します。文はあなたのコードはるかに簡単には下(condtionの近接性とコードブロック)にトップを読み取るために行う場合

否定して他のすべての文の交換:

# 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より大きい場合は、サブルーチン/関数を作成します。

+0

これはもちろん、次のように再度リファクタリングすることができます。 –

関連する問題