2016-09-30 85 views
-2

當我在switch語句中使用break或return時,我想知道差異的一些東西。哪個更有效?有人可以向我解釋這個嗎?非常感謝你。代碼如下:哪個更好?在switch語句中使用break或return時?

public void foo(){ 
    int i = 10; 
    switch (i) { 
     case 1: { 
      //code here 
      break; //or return; 
     } 
     case 2: { 
      //code here 
      break; //or return; 
     } 
     // code code 
     // code code 
     // code code 
     case 10:{ 
      //code here 
      break; //or return; 
     } 
     default:{ 
      //code here 
      break; //or return; 
     } 
    } 
} 
+6

你的情況沒有什麼區別。在非無效方法中,它們做不同的事情。 – shmosel

+0

我知道有沒有不同的功能,但我想知道哪個更有效。 –

+0

你爲什麼認爲一個更有效率?即使假設性能存在差異,你花更多時間來問這個問題,你會從虛擬優化中解脫出來。找到更好的方法來做。 – shmosel

回答

-2

中斷表示代碼將退出當前塊({})並繼續執行以下代碼(如果有)。

int i = 1; 
    switch (i) 
    { 
     case 1: Console.WriteLine("1"); break; 
     case 2: Console.WriteLine("2"); break; 
     default: Console.WriteLine("..."); break; 
    } 

    Console.ReadLine(); 

在上述情況下,控制檯將等待用戶輸入,因爲它能夠達到Console.ReadLine();

int i = 1; 

    switch (i) 
    { 
     case 1: Console.WriteLine("1"); return; 
     case 2: Console.WriteLine("2"); break; 
     default: Console.WriteLine("..."); break; 
    } 
Console.ReadLine(); 

至於上面的情況下,程序將不執行任何下面的代碼和它永遠不會當int i爲1時達到Console.ReadLine()

您可以通過調試來清楚地看到他們的行爲。

+1

這是什麼語言? – shmosel

+1

他使用javascript語言 –

1

shmosel在你的情況是正確的。 但是,如果您想要在switch語句中執行操作並返回該值,則需要返回,因爲您正從交換機獲取某些內容。休息只是停止執行交換機,所以沒有任何返回。

兩種不同版本之間的療效沒有實際影響。他們的行爲有點不同。被採納的內存將是類似的。

2

這兩者是完全不同的 - 試圖在效率方面比較它們簡直是荒謬的。中斷會終止交換機後續子句的執行,並在交換機塊之後繼續執行。返回終止當前方法的執行並將控制權返回給調用方法。他們唯一共同的地方就是代碼不會落入執行任何進一步的情況。

一般來說,我會謹慎使用switch語句的返回值,這並不是因爲對性能有任何影響,而是因爲它使代碼的行爲有點難以推理。 (我也會爭辯說,Java中的switch語句幾乎是不需要的,它在程序中的存在通常表示設計失敗,但那是另一個問題)

1

在這個例子中,在意義或性能上沒有區別。在其他情況下,可能會有區別......因爲breakreturn意思是不同的東西。 (而如果兩個結構在特定情況下意味着不同的事情,他們很可能會表現不同!)

然而,文體break更好:

  1. 一般,有多個出口點方法(即多個顯式和隱式語句)很難理解。

  2. 在這個例子中,假設你決定改變方法去做switch聲明之後的事情....


1 - 這是值得商榷的(見https://stackoverflow.com/a/4838892/139985),並且也有例外。但我會說它適用於這個例子。


OK,THX,只是因爲我的同事間隔變化在我的代碼返回。所以我只想知道這是否更有效。

我會問他們他們解釋他們爲什麼這樣做。重點在於,他們可能是出於一個很好的理由,或者一個有爭議的理由......或者一個不正確的理由。如果他們的原因不正確,他們需要了解他們的推理是不正確的,這樣他們就不會浪費每個人的時間,並且可能會損害流程中的代碼庫,同時進行這樣的更改。

+0

非常值得商榷。就個人而言,我非常希望在非空方法中使用多個返回值,因爲它縮短了代碼並減少了樣板。 – shmosel

+0

實際上,在這個例子中,它不保存任何**鍋爐板。由於「break」是一個小於'return'的字符,所以你用>> break'來保存<<空格。 (不是那麼重要,只是說......) –

+0

這個例子不是非void方法。我的觀點是,這是非常主觀的,取決於具體情況。 – shmosel