2017-07-06 90 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語句將作爲條件按順序執行,都是如此。但是將&& checkVariable()添加到條件將會使其爲假,因爲changeVariable()修改checkVariable()的行爲的副作用。這意味着checkVariable()擁有兩個值,這是不直觀的和錯誤的編碼實踐,但在這裏有效。經驗法則是在條件之前執行函數/方法,並將結果存儲在條件中使用的變量中,以避免模糊性。

相關問題