Ai đã quyết định (và dựa trên những khái niệm nào) mà việc switch
xây dựng (bằng nhiều ngôn ngữ) phải sử dụng break
trong mỗi tuyên bố?
Tại sao chúng ta phải viết một cái gì đó như thế này:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(nhận thấy điều này trong PHP và JS; có thể có nhiều ngôn ngữ khác sử dụng ngôn ngữ này)
Nếu switch
là một thay thế if
, tại sao chúng ta không thể sử dụng cùng một cấu trúc như cho if
? I E:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
Người ta nói rằng break
ngăn chặn việc thực hiện khối theo sau hiện tại. Nhưng, có ai đó thực sự gặp phải tình huống này, nơi có nhu cầu thực hiện khối hiện tại và theo sau không? Tôi đã không. Đối với tôi, break
luôn luôn có. Trong mỗi khối. Trong mỗi mã.
case 'a': case 'A': case 'b': case 'B'
nhưng chủ yếu là vì tôi không thể làm được case in [ 'a', 'A', 'b', 'B' ]
. Một câu hỏi tốt hơn một chút là, trong ngôn ngữ ưa thích hiện tại của tôi (C #), việc nghỉ là bắt buộc và không có sự sụp đổ ngầm; quên break
là lỗi cú pháp ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
break
có mặt ở bất cứ đâu” là một quy tắc đơn giản hơn đáng kể để thực hiện hơn “Đừng phát ra một bước nhảy nếu fallthrough
có mặt trong một switch
”.
CASE
câu lệnh tương đương với một khối if / otherif khổng lồ.