2009-02-23 31 views
1

是什麼說法的區別:在代碼塊中使用return關鍵字的

if (abc == "a") 
{ 
// do something here... 
return; 
} 

,並沒有返回關鍵字與上述相同,但?

我是一個C#編碼器,我知道返回關鍵字後跟一個類型或變量返回該項目,但在上述上下文中,返回似乎只是退出代碼塊,但它會使任何功能或性能更改代碼?

由於從功能

回答

13

「返回」退出,不只是封閉代碼塊。所以,如果你的代碼塊是一個功能的情況下,像這樣(我不知道C#所以我使用Java語法):

int thisIsAFunction(int a) { 
    if (abc == "a") 
    { 
     // do something here... 
     return 1; 
    } 
    // do something else here... 
} 

如果abc == "a"那麼「做別的事情在這裏」不會跑。但是,如果您刪除if塊內的return語句,則它會運行。

3

return語句立即退出函數,所以它可能具有性能優勢,因爲函數中的以下代碼根本不會被執行。

+0

我不認爲這是一個好建議 - 從某個函數(即結尾)開始有一個退出點並且構造邏輯來適應這種情況幾乎總是可取的。任何需要維護你的代碼的人都會爲此感謝你。 – 2009-02-23 19:19:33

+0

不一定。我相信在很多情況下(例如大多數遞歸基本情況),`return`語句使代碼更具可讀性。這取決於具體情況。這可能會損害或提高可讀性。但我同意,如果濫用,它可能會像goto一樣行事。 – 2009-02-23 19:21:41

1

在你的情況下,沒有 - 但如果你有你的「如果」語句之後的其他代碼,你只想運行,如果你的說法是假的(例如,如果abc != "a"),那麼return允許你繞過並退出功能/方法。

0

執行return語句會使執行跳出方法。如果沒有這個回報,它將會繼續下一個陳述。

3

MSDN

return語句終止於它出現的控制權返回給調用方法的方法的執行。它也可以返回一個可選值。如果該方法是void類型,則可以省略return語句。

//this would do nothing 
public void method() 
{ 
    return; 
} 


//this would return true 
//notice the return type of bool this means 
//the method expects a true\false value 
public bool method2() 
{ 
    return true; 
} 

public void test() 
{ 
    if(method2()) 
     method() 
} 

現在,如果你跑測試方法2將始終返回true和方法1將剛剛結束其處理

0

是的,你的方法並沒有在這種情況下返回類型。 例如

public void Foo 
{ 
if (abc == "a") 
{ 
    // do something here... 
    return; 
} 
// some other code 
} 

這就是說,如果abd =「a」,則退出該方法,以便其他代碼不會執行。

1

在循環或case語句中,可以使用break來實現此結果。儘管如此,這對if語句或代碼塊不起作用。

是的,還有退出封閉功能。

2

return語句確實退出當前的方法,而不僅僅是代碼塊(for/while/if/etc)。因此,對於像情況下非常有用以下幾點:

public void MyMethod(object myObject) 
{ 
    if (myObject == null) 
    { 
     return; // exits method. 
    } 

    // do something with myObject 
} 

附加信息:我會指出,很多人希望有一個出口點的方法,但是,它可以是有用的做類似的東西這裏的例子在某些情況下。我總是試圖找到方法來限制方法中返回點或退出點的數量。

0

它可以是一種更簡潔的書寫方式。我通常在方法開始或接近開始時的守衛條款中執行此操作。如果您有錯誤情況,只是將方法「退回」。它節省了將其餘工作包裝在其他塊中。看起來微不足道,但它有助於降低代碼複雜性。

相關問題