2010-07-12 75 views
0

我正在關注書中的一些例子,並且我注意到有兩種不同的約定具有各種返回條件。兩者有什麼區別?如果if包含返回值,我應該使用else嗎?

//example 1 
if(someCondition) 
{ 
    return (someValue); 
} 
return (someOtherValue); 

//example 2 
if(someCondition) 
{ 
    return (someValue); 
} 
else 
{ 
    return (someOtherValue); 
} 

就個人而言,我更喜歡第二個例子,因爲它更明確,我覺得它更具可讀性。

+0

您使用哪種語言? – ChaosPandion 2010-07-12 23:40:40

回答

2

避免else並利用早期的return可以防止代碼變得太深嵌套。哪個示例看起來更可讀?

function doStuff (thing) { 
    if (thing.foo) { 
    alert ("thing.foo is alive and well"); 
    if (thing.foo.bar) { 
     alert ("thing.foo.bar is alive and well"); 
     if (thing.foo.bar.baz) { 
     alert ("thing.foo.bar.baz is alive and well"); 
     // TODO: stuff with thing.foo.bar.baz 
     } else { 
     alert ("thing.foo.bar.baz doesn't exist!"); 
     } 
    } else { 
     alert ("thing.foo.bar doesn't exist!"); 
    } 
    } else { 
    alert ("thing.foo doesn't exist!"); 
    } 
} 

function doStuff (thing) { 
    if (!thing.foo) { 
    alert ("thing.foo doesn't exist!"); 
    return; 
    } 
    alert ("thing.foo is alive and well"); 
    if (!thing.foo.bar) { 
    alert ("thing.foo.bar doesn't exist!"); 
    return; 
    } 
    alert ("thing.foo.bar is alive and well"); 
    if (!thing.foo.bar.baz) { 
    alert ("thing.foo.bar.baz doesn't exist!"); 
    return; 
    } 
    alert ("thing.foo.bar.baz is alive and well"); 
    // TODO: stuff with thing.foo.bar.baz  
} 

...我覺得第二個是更可讀!

6

如果你的語言包含一個條件操作符,我會推薦使用它。

return condition ? ifTrue : ifFalse; 
+1

或者,在工作中,您可能會選擇不使用會迫使某些人花費額外幾秒鐘(幾分鐘)來分析和討論的操作員。我已經看到了這種浪費很多時間,我從來沒有見過簡單的如果/然後創造同樣的時間下沉。當然,在家裏,樂趣越多越好。 – 2010-07-12 23:44:45

+0

我喜歡這種簡寫,但只有代碼簡單纔有用。 – PBG 2010-07-13 00:24:52

+0

@Pasha - 您當然可以將複雜的邏輯轉換爲自己的方法。 '返回條件? DoSomethingSpecific():DoSomethingElseSpecific();' – ChaosPandion 2010-07-13 00:26:46

3

除了外觀沒有區別。無論您選擇哪種方式,兩者都會返回相同的結果。

2

使用任何你喜歡的東西,並且用你的代碼或者你的團隊最瞭解的東西看起來最好。據我所知,這並沒有一個真正的公約。

1

就我個人而言,我認爲在方法中有一個return語句總是好的,否則代碼可能有點難以閱讀,因此無法維護。所以做類似的事情

def returnVal = default; 

if (cond) { 
returnVal = whatever 
} 

return returnVal 
+0

理論上我會同意,但是試圖讓你的代碼只有一次返回,這使得它比需要的更復雜。在函數中保持行數很少有助於多個回報看起來乾淨和易於理解。 – palto 2010-07-12 23:59:36

+0

是的,這更像是一種「藝術」的偏好。我只是認爲每個方法的一個return語句看起來不錯,並且使得事情變得清晰。隱含的是,希望有小的方法開始,這也有幫助。 另一個說法是,像Eclipse和Intellij這樣的IDES都會給出警告。試圖從方法返回的地方找出它可能會讓人困惑。除非最後只有一個回報...... – hvgotcodes 2010-07-13 01:38:38

+0

我認爲當大多數函數調用傾向於在數百或數千行範圍內運行時,肯定會使用單個返回事件 - 此時在中間是地獄。現在我們編寫了更小的方法,但這種方法往往沒有什麼幫助(如果有的話),但許多人堅持使用它,因爲人們是習慣的生物,而且一旦你告訴別人這是最好的方式,或者它看起來更好,那麼他們傾向於堅持它,往往宗教。 – 2010-07-13 17:06:21

3

就個人而言,這種情況出現很多是當你從你的函數/方法調用中消除無效狀態。例如:

sqrt(x) { 
    if(x < 0) 
     return 0; 

    answer=math; 
     return(answer); 

如果使用elses,最終會產生很多非常可怕的嵌套。

這也涉及到「單一返回」理論 - 很多人認爲一種方法應該只有一個返回語句。這在某些情況下也會導致混亂。

在您的具體示例中它是50/50 IMO。

做你喜歡的事,但我強烈建議給「立即測試並返回簡單案例」理論一試。

相關問題