2012-07-30 74 views
1

在一個函數的整個邏輯符合「如果這個條件是真/假,返回這個,否則返回這個」的線,什麼是最好的或可能是最接受的形式呢?似乎有3種我見過的方式。如果其他分支,返回語句的位置?

int function(bool foo){ 
    if(foo){ 
     return doSomething(); 
    }else{ 
     return somethingElse; 
    } 
} 

這是很有道理的,但我曾經讀到過這樣一個返回類型的函數不應該返回類型位於一個分支。 (爲什麼,源從來不說),所以,再有就是這個:

int function(bool foo){ 
    if(foo){ 
     return doSomething(); 
    } 
    return somethingElse; 
} 

具有返回類型的分支之外的,但它帶走了一些我認爲代碼的含義,而我也看到了if-else塊有好處。 (那些是什麼,該消息來源沒有說任何)最後,還有這樣的:

int function(bool foo){ 
    int result; 
    if(foo){ 
     result = doSomething(); 
    }else{ 
     result = somethingElse; 
    } 
    return result; 
} 

意思是存在的,返回的是一個分支之外的,但在另外一個變量和代碼,這是不是真正需要的功能。

我的問題是這三種形式中的哪一種或者其他形式(如果有的話)會是在這種情況下編寫函數的最佳方式?

+2

我更喜歡第二個,但我認爲這根本不重要。然而,第三個對我來說似乎有點不合適,除非你是一個堅持每個函數一個return語句原則的人。 – chris 2012-07-30 01:47:45

+3

太主觀。我個人會寫:'返回foo? doSomething():somethingElse;'。 – GManNickG 2012-07-30 01:49:09

+1

好閱讀[「唯一回報」的概念來自哪裏?](http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come -從)。 – 2012-07-30 02:06:16

回答

1

好問題。說明你正在考慮風格,可讀性和爲什麼我們用不同的方式編寫相同的代碼的潛在原因。最終取決於你。

1號很好,非常清楚。

Number 2我通常在測試錯誤條件時使用。如果我一路走到最後,那麼我會迴歸成功。獎金是你可以經常丟下大括號而不會失去清晰度。

當設置來自內部循環的結果時,其中可能有多種返回值,或者從其他呼叫傳遞返回值並且需要進行中間檢查時,3號通常很有用。哦,這也是適當的,你必須做一些不依賴於你的返回值的共同清理。

在簡單的情況下,你通常不會做數字3。你會希望有一個很好的理由將值存儲在變量中。

你可能會說這裏有第四個選項:查詢冒號操作符。如果你認爲簡單的內聯類成員是良好的作風有用=)

int function(bool foo) { return foo ? doSomething() : somethingElse; } 

我寫在一行,當你看到它,因爲這通常是。