haXe語言的switch...case語法乍看上去和C++/Java等差不多,但實際上更嚴謹和易用。
無需break
首先,haXe中的switch...case中無需break語句,這樣就完全避免了因忘寫break而造成運行期錯誤,我敢說這種錯誤幾乎是每個類java語言程序員都犯過的吧。
那麼,這是不是意味着fall through技巧也沒法使用了呢?也就是類似下面的寫法, 即B和C共享同一處理邏輯:
switch (flag) {
case FLAG_A:
// do something
break;
case B: // fall through
case C:
// do something else
break;
}
其實haXe語言用更優雅的方式給我們瞭解決方案,即case後面可以有多個逗號分隔的表達式,那麼上例在haXe中就可寫爲:
switch (flag) {
case FLAG_A:
// do something
case B, C:
// do something else
}
這樣的代碼是不是更清晰和健壯呢?
case後可以是表達式
java等語言中的case後只能用數字常量,甚至字符串常量都不行,haXe的switch...case則靈活的多,可以用變量甚至表達式,如:
switch (v) {
case 0:
e1;
case foo(1):
e2;
case 65, 90:
e3;
default:
e4;
}
switch語句作爲一個表達式是可以返回值的
其實這是haXe語言級的特性,haXe中的所有控制語句其實都是作爲表達式處理的,如if語句,switch語句等,具體看下面的例子:
var val = switch (v) {
case 0:
e1;
case foo(1):
e2;
case 65, 90:
e3;
default:
e4;
}
switch表達式的值就是適用case分支語句塊中最後一個語句(表達式)的值。