是什麼說法的區別:在代碼塊中使用return關鍵字的
if (abc == "a")
{
// do something here...
return;
}
,並沒有返回關鍵字與上述相同,但?
我是一個C#編碼器,我知道返回關鍵字後跟一個類型或變量返回該項目,但在上述上下文中,返回似乎只是退出代碼塊,但它會使任何功能或性能更改代碼?
由於從功能
是什麼說法的區別:在代碼塊中使用return關鍵字的
if (abc == "a")
{
// do something here...
return;
}
,並沒有返回關鍵字與上述相同,但?
我是一個C#編碼器,我知道返回關鍵字後跟一個類型或變量返回該項目,但在上述上下文中,返回似乎只是退出代碼塊,但它會使任何功能或性能更改代碼?
由於從功能
「返回」退出,不只是封閉代碼塊。所以,如果你的代碼塊是一個功能的情況下,像這樣(我不知道C#所以我使用Java語法):
int thisIsAFunction(int a) {
if (abc == "a")
{
// do something here...
return 1;
}
// do something else here...
}
如果abc == "a"
那麼「做別的事情在這裏」不會跑。但是,如果您刪除if
塊內的return語句,則它會運行。
return
語句立即退出函數,所以它可能具有性能優勢,因爲函數中的以下代碼根本不會被執行。
在你的情況下,沒有 - 但如果你有你的「如果」語句之後的其他代碼,你只想運行,如果你的說法是假的(例如,如果abc != "a"
),那麼return
允許你繞過並退出功能/方法。
執行return語句會使執行跳出方法。如果沒有這個回報,它將會繼續下一個陳述。
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將剛剛結束其處理
是的,你的方法並沒有在這種情況下返回類型。 例如
public void Foo
{
if (abc == "a")
{
// do something here...
return;
}
// some other code
}
這就是說,如果abd =「a」,則退出該方法,以便其他代碼不會執行。
在循環或case語句中,可以使用break
來實現此結果。儘管如此,這對if語句或代碼塊不起作用。
是的,還有退出封閉功能。
return
語句確實退出當前的方法,而不僅僅是代碼塊(for/while/if/etc)。因此,對於像情況下非常有用以下幾點:
public void MyMethod(object myObject)
{
if (myObject == null)
{
return; // exits method.
}
// do something with myObject
}
附加信息:我會指出,很多人希望有一個出口點的方法,但是,它可以是有用的做類似的東西這裏的例子在某些情況下。我總是試圖找到方法來限制方法中返回點或退出點的數量。
它可以是一種更簡潔的書寫方式。我通常在方法開始或接近開始時的守衛條款中執行此操作。如果您有錯誤情況,只是將方法「退回」。它節省了將其餘工作包裝在其他塊中。看起來微不足道,但它有助於降低代碼複雜性。
我不認爲這是一個好建議 - 從某個函數(即結尾)開始有一個退出點並且構造邏輯來適應這種情況幾乎總是可取的。任何需要維護你的代碼的人都會爲此感謝你。 – 2009-02-23 19:19:33
不一定。我相信在很多情況下(例如大多數遞歸基本情況),`return`語句使代碼更具可讀性。這取決於具體情況。這可能會損害或提高可讀性。但我同意,如果濫用,它可能會像goto一樣行事。 – 2009-02-23 19:21:41