2017-07-06 1 views
-1

今日、私はコードレビューでコードブロックを発見しましたが、私には奇妙なことがありましたが、このコードが奇妙に見える客観的な理由は見つかりませんでした。条件が悪ければ、なぜそれを行うのが悪いのですか

コードは、この(それのPHP)

// inside a for loop 
    if($thing->isGood() === true && saveThing($thing)) { 
     $successfulSavedCount++; 
    } 
    // for end 

    function saveThing($thing) { 
     // this method persists $thing to the database 
    } 

$this->isGood() === trueは私の罰金が存在するかどうかの確認が、何かが私に間違って感じていメソッドを呼び出すように見えます。

ずっと前に私はどこかを読んでをしています状態のものは悪いですが、どうして悪いのか覚えていません。

多分あなたの誰かがそれが悪い(または上質)理由を説明できますか?

+0

これは役立つかもしれません:[機能プログラミングで副作用が悪いと思われる理由](https://softwareengineering.stackexchange.com/q/15269/22659) –

+0

人々はif文で関数を使用します。時間と多くの状況で一般的な練習です。最高でも、スタイル・ドキュメンテーションに従ってコードを読んでいた人の意見になります。 –

答えて

0

ほとんどの場合、の条件内で行うことはちょっと悪いスタイルです。後で読むと維持するのが難しいためです。しかし、言語によって許されているので、これには何も問題はありません。過度に複雑な条件文を避ける最も説得力のある理由は、副作用です。以下のコードを考えてみましょう。

$globalVariable = true;  
.... 
if(checkVariable() && changeVariable()){ 
    do stuff.... 
} 
function checkVariable(){ 
    return $globalVariable; 
} 
function changeVariable(){ 
    $globalVariable = false; 
    return true; //Marking success 
} 

このif文は、条件として順番に実行されるため、すべてtrueです。しかし、を条件に追加すると、changeVariable()の副作用のために、動作がcheckVariable()に変更されるため、falseになります。これは、checkVariable()が2つの値を保持していることを意味します。経験則では、条件の前に関数/メソッドを実行し、その結果を変数に格納してその条件に使用してあいまいさを避けることです。

関連する問題