2016-04-21 139 views
0

你應該寫你的功能,如這裏面:返回一個else語句

int foo() 
{ 
    if (bar) 
     return 1; 
    return 2; 
} 

還是這樣嗎?

int foo() 
{ 
    if (bar) 
     return 1; 
    else 
     return 2; 
} 

比其他更好的辦法客觀,或者是個人喜好的問題?如果有一種方式更好,爲什麼?

+0

這是個人喜好的問題。 – Thilo

+0

相關:http://stackoverflow.com/questions/27024084/is-there-a-performance-difference-between-returning-inside-if-block-or-writing?rq=1 http://stackoverflow.com/問題/ 26003104/java-best-style-for-return-statement-inside-or-outside-if-condition?rq = 1 http://stackoverflow.com/questions/32824797/different-design-decisions-with-if -else語句?rq = 1 – Thilo

+1

請注意,還有'return bar? 1:2' – Thilo

回答

1

沒有在性能此事不同。 此處其個人偏好。我更喜歡第二個,因爲它是乾淨和可以理解的。有經驗的人可以立即掌握語法但是當你將第一種語法放在新程序員面前時,他會感到困惑。

我更喜歡整齊的代碼(同時考慮到可讀性和性能)。當第一種語法確實沒有性能改進時,我會選擇第二種語法。

0

上述任何陳述都沒有性能改進,完全由您選擇。編譯器足夠聰明,能夠弄清楚你正在嘗試做什麼。我個人更喜歡第一個,因爲這意味着更少的代碼。然而在c#中,生成的msil在兩種情況下都是相同的。

1

我嘗試儘可能從函數中獲取一個退出點。使代碼更易於維護和調試。所以,我會做這樣的事情:

int foo() 
{ 
    var retVal; 
    if (bar) { 
     retVal = 1; 
    } 
    else { 
     retVal = 2; 
    } 
    return retVal; 
} 

或者這個,如果你想成爲更簡潔...

int foo() 
{ 
    var retVal = 2; 
    if (bar) { 
     retVal = 1; 
    } 
    return retVal; 
} 
+0

你最近的'return'是無法訪問的代碼。 –

+0

@Reddy - 它如何無法訪問?它將始終執行。 – RJM

+0

'return retVal;'無法訪問..如果控件進入裏面,那麼if裏面的return語句會被執行。否則,如果它跳過,否則將執行返回語句。沒有其他的流程可用..你的語法會很好,如果它的'if'' else else' ... –