2017-03-24 61 views
0

僞代碼爲什麼switch語句在大多數語言中的實現方式如此?

int i=10 

switch(i) 
    case 1: 
    print(1); 
    case 10: 
    print(10); 
    case 20: 
    print(20); 

直覺這預計將打印10但由於沒有break語句,這將打印10和20

沒有任何其他人認爲這感覺就像是在一個錯誤語言?

+0

不,落空的情況下可以是有益的,雖然他們經常被濫用。確保你的不混合模式匹配'switch'和'switch'匹配文字。 – Carcigenicate

回答

2

並非每種語言都允許在switch聲明中出現轉折。維基百科上有一個brief section

  • 的C(C,C++,Objective-C的)家庭允許秋天通過默認
  • 帕斯卡家庭不
  • Perl不默認,但你可以要求它由包括continue關鍵詞
  • C#(更靠近爪哇比C)需要break到空塊結束所有case塊但允許您組一起:
  • 夫特不允許下降通過和具有強大的模式匹配系統中,除了要求switch爲詳盡。

switch聲明有各種各樣的要求。並非每種語言都是一樣的!一對夫婦的小例子:

// C# 
switch (i) { 
    case 1: 
    case 2: 
     // you can group empty case blocks together 
     break;  // but must end with break 
    case 3: 
     // do something else 
     break; 
} 

// Swift 
switch i { 
    case 1:   // match 1 
    case 2,3:  // match 2 or 3 
    case 4...10: // match 4 to 10 (inclusive) 
    case let n where n % 2 == 0: // match an even number and assign it to n 
    default:  // must be exhaustive 
} 

參見:Appropriate uses of fall-through switch statements