2011-04-02 70 views
1

每天我都會遇到這種困境 - 最好的做法是在函數開始時檢查一個不需要的狀態並立即返回,或者最好的做法是檢查所需條件並繼續返回假。首次出錯或成功時返回

我明白那裏不會是一個適合所有解決方案,這是一個真正的風格問題,但我只是對其他開發人員通常會做什麼感興趣。

每當這種情況出現時,我總是會發現自己在猶豫不決。

作爲一個例子(在PHP編碼):

檢查的不希望的狀態第一...

function myFunction($myVal) 
{ 
    if ($myVal != 'desiredVal') { 
     return false; 
    } 

    //Continue here with main function code 

    return true; 
} 

或者,檢查所需的條件第一...

回答

2

這主要是一個風格問題,兩者都是正確的。我發現在頂部的錯誤檢查後,主要的方法功能更清潔,更容易遵循。

最好的建議是選擇一種風格並與其保持一致。

0

對於非平凡的功能,我總是喜歡第一種風格;如果您需要查找超過八到十行代碼才能找到導致return false;的條件,那麼我認爲這是易讀性的一大障礙。如果函數足夠短,可以在一個小塊(八行,十行)中讀取,那麼任何一種方法都可以,但請記住函數會隨着時間的推移而增長。這會挑選第一種風格並堅持下去,所以你的代碼庫具有更高的一致性。

0

我更喜歡第一種情況,只是因爲你沒有在If語句中包含函數邏輯的其餘部分。在第二種風格中,如果在這種情況下「主要功能代碼」很長,那麼您可以開始忽略第一個If是什麼。我還發現,如果被認爲是「好」輸入的邏輯開始變得越來越複雜,那麼可以結束一個非常長的If或一組嵌套的Ifs,其實際功能嵌套深。在第一種情況下,如果您需要測試幾個條件以確定您是否具有所需的值並且可以繼續,則可以簡單地在第一個條件之後添加更多的Ifs,並讓它們中的任何一個在失敗。對我而言,這更容易維護和遵循。

就像其他人提到的那樣,這是一種風格的東西,兩種方法都是正確的。最重要的是嘗試並保持一致。

0

我發現這是一個很好的閱讀 - 湯姆達夫的「從上到下閱讀代碼」,「其他被認爲有害的」部分,http://iq0.com/notes/deep.nesting.html - 不幸的是該鏈接目前已經死亡。但它基本上歸結爲其他人所說的。當然,在第一種變體中,由於//主函數代碼的縮進級別較低,因此右側可用空間更多。