Bài 10: Switch…case trong Javascript
Câu lệnh switch
đánh giá một biểu thức, so sánh giá trị của biểu thức với một mệnh đề trường hợp(case
clause) và thực hiện các câu lệnh được liên kết với trường hợp đó.
Nội dung của bài
Syntax
switch (expression) {
case value1:
//Statements executed when the
//result of expression matches value1
[break;]
case value2:
//Statements executed when the
//result of expression matches value2
[break;]
...
case valueN:
//Statements executed when the
//result of expression matches valueN
[break;]
[default:
//Statements executed when none of
//the values match the value of the expression
[break;]]
}
- expression: là một biểu thức mà kết quả của nó được so sánh với các case
- case valueN: nếu biểu thức khớp với giá trị của caseN được chỉ định, các câu lệnh bên trong mệnh đề trường hợp phù hợp được thực thi cho đến hết hoặc gặp câu lệnh
break
- default: các câu lệnh bên trong nó được thực thi nếu giá trị của biểu thức không khớp với bất kỳ mệnh đề case nào
Example
Trong trường hợp dưới đây, ta có bài toán xếp hạng mức rank của một hệ thống và in ra câu lệnh tương ứng. Với nhiều mức rank được đưa ra, ta không nên dùng câu lệnh if else trong trường hợp này để tránh sự phức tạp và khó hiểu cho đoạn mã. Thay vào đó switch case là lựa chọn tuyệt vời. Nếu rank
có giá trị tương ứng với case clause nào đó thì câu lệnh tương ứng trong nó sẽ được thực thi. Giả sử rank === 'S'
, console.log('Expert!!!');
sẽ được thực thi và in log ra màn hình console. Sau đó gặp câu lệnh break;
và kết thúc switch statement. Case ‘D’ và ‘E’ trong ví dụ sẽ được thực thi như nhau. Case default sẽ thực thi nếu rank của user khác với các case đã định nghĩa.
switch (rank) {
case 'S':
console.log('Expert!!!');
break;
case 'A':
console.log('Excellent!!!');
break;
case 'B':
console.log('You are good!');
break;
case 'C':
console.log('Normal.');
break;
case 'D':
case 'E':
console.log('Unlucky!');
break;
default:
console.log('We cant find your rank: ' + rank + '.');
}
Có thể đặt default ở giữa các case clause?
Tất nhiên bạn có thể làm điều đó. Nếu không trùng với bất cứ giá trị case clause nào, default clause sẽ được thực thi. Tuy nhiên, để code dễ đọc và dễ hiểu, hãy đặt default clause xuống cuối!
switch (rank) {
case 'S':
console.log('Expert!!!');
break;
case 'A':
console.log('Excellent!!!');
break;
default:
console.log('We cant find your rank: ' + rank + '.');
break;
case 'B':
console.log('You are good!');
break;
case 'C':
console.log('Normal.');
break;
case 'D':
case 'E':
console.log('Unlucky!');
break;
}
Nếu không đặt break thì sẽ như thế nào?
Trong câu lệnh switch, nếu ta ‘quên‘ đặt break thì chương trình sẽ tự động thực thi các case bên dưới cho tới khi gặp break hoặc hết thì thôi.
Giống như ví dụ bên trên, nhưng nếu ta không có break ở câu lệnh default, case ‘B’ sẽ tiếp tục được thực thi! Hãy luôn nhớ đặt break để kết thúc case!
let rank = 'AB';
switch (rank) {
case 'S':
console.log('Expert!!!');
break;
case 'A':
console.log('Excellent!!!');
break;
default:
console.log('We cant find your rank: ' + rank + '.');
case 'B':
console.log('You are good!');
break;
case 'C':
console.log('Normal.');
break;
case 'D':
case 'E':
console.log('Unlucky!');
break;
}
/* Console
*
* We cant find your rank: AB.
* You are good!
*
*/
Kết luận
Các cấu trúc rẽ nhánh là một trong những câu lệnh phổ biến nhất trong bất cứ một ngôn ngữ lập trình nào. Vì vậy hãy cố gắng sử dụng thành thạo cả if else lẫn switch case bạn nhé!