Hướng dẫn sử dụng switch-case trong Javascript (Phần V)
-
I. Câu lệnh switch…case là gì?
-
Cũng giống như câu lệnh if…else đã học ở bài trước, switch…case cũng là một câu lệnh điều kiện. Vậy tại sao phải dùng switch…case, khi đã có câu lệnh if…else ?
-
Câu lệnh switch…case được dùng để thực thi những hành động khác nhau, dựa trên những điều kiện cụ thể. Trong trường hợp bạn có rẽ nhánh (nhiều điều kiện) khác nhau, thay vì sử dụng nhiều câu lệnh else if, bạn có thể chỉ cần sử dụng một câu lệnh switch…case để giải quyết.
II. Syntax:
switch(<biểu thức>) { case <giá trị 1>: <code block 1> break; case <giá trị 2>: <code block 2> break; …. case <giá trị i>: <code block i> break; …. default: <code block> }
Cụ thể như sau:
- switch, case là từ khóa bắt buộc, trong khi default là tùy chọn
- break là một lệnh nhảy. Khi JS gặp từ khóa break, nó tự động thoát khỏi câu lệnh
- switch…case, đồng thời dừng việc thực thi <code block> của case đó lại.
- <biểu thức> phải là biểu thức trả về kết quả kiểu:
- Số nguyên (int, long, byte, . . .)
- Ký tự hoặc chuỗi (char, string)
- <giá trị i> với i = 1..n là giá trị muốn so sánh với giá trị của <biểu thức>.
- <code block i> với i = 1..n là đoạn lệnh sẽ thực hiện khi <giá trị thứ i> tương ứng bằng với giá trị của <biểu thức>.
Ý nghĩa: Duyệt lần lượt từ trên xuống dưới và kiểm tra xem giá trị của <biểu thức> có bằng với <giá trị i> đang xét hay không. Nếu bằng thì thực hiện <code block i> tương ứng. Nếu không có trường hợp nào bằng, sẽ thực hiện <code block> ở default.
III. Chú ý khi sử dụng câu lệnh switch…case:
- Giá trị so sánh với nhau phải cùng kiểu (Strict comparison ===).
- Nếu có nhiều case cùng thỏa mãn giá trị <biểu thức>, case đầu tiên được chọn.
- Nếu không có case nào được thực thi và không có trường hợp default, chương trình sẽ tiếp tục chạy các câu lệnh sau câu lệnh switch…case.
- Nhớ sử dụng break trong mọi case, trừ case cuối cùng trong câu lệnh switch…case.
IV. Các Code Block có cùng điều kiện:
- Trong một vài tình huống cụ thể, bạn có thể sẽ muốn sử dụng chung một code block cho nhiều trường hợp khác nhau. Hãy xem thử ví dụ sau đây:
var lang = prompt("Nhập ngôn ngữ bạn muốn dùng:"); switch (lang){ case 'vietnamese' : case 'english’ : case 'french’ : document.write("Bạn đã chọn " + lang + " để sử dụng"); break; default: document.write("Ngôn ngữ bạn nhập không có trong hệ thống"); }
-
Trong trường hợp này, khi giá trị biến lang bằng một trong ba giá trị 'vietnamese'; 'english’ hoặc 'french’ thì đều trả ra cùng 1 hành động là viết ra màn hình câu: "Bạn đã chọn " + lang + " để sử dụng".
-
Vì thế, ta có thể nhóm ba trường hợp đó thành một bằng các bỏ đi lệnh break ở trong mỗi case, vừa tiết kiệm code, vừa dễ đọc, dễ chỉnh sửa.
V. Chuyển đổi giữa lệnh if…else và switch…case
-
Cả hai lệnh if…else và switch…case đều là câu lệnh điều kiện, đều có tính chất chung là rẽ nhánh chương trình. Vậy câu hỏi đặt ra là làm thế nào để chuyển đổi một bài toán từ lệnh if sang switch và ngược lại.
-
Khi chuyển đổi giữa lệnh if sang lệnh switch thì bạn cần phải lưu ý một điều như sau: Đối với lệnh switch nó sử dụng toán tử so sánh bằng (===). Còn đối với lệnh if thì ngoài bằng ra, bạn có thể sử dụng các toán tử khác như toán tử so sánh lớn hơn, bé hơn, ... Vì vậy tùy vào mỗi bài toán mà bạn có thể chuyển đổi được hoặc không được.
-
Một ví dụ ta không nên chuyển sang switch case:
var point = parseInt(prompt('Nhập số điểm thi bạn đạt được')); var message = ''; if (point < 5 && point >= 0){ message = 'Bạn đã bị rớt môn'; } else if (point >= 5 && point <= 6){ message = "Bạn là học sinh trung bình"; } else if (point > 6 && point < 8){ message = "Bạn là học sinh khá"; } else if (point >= 8 && point <= 10){ message = "Bạn là học sinh giỏi"; } else{ message = "Bạn nhập điểm bị sai"; } document.write(message);
Với bài toán này ta không nên chuyển sang lệnh switch vì nội dung so sánh là một biểu thức, nếu bạn cố tình muốn chuyển thì cũng được nhưng code sẽ rất là dài vì bạn phải so sánh từng con số từ 0 - 10.
Vậy nên, trước khi quyết định nên sử dụng if…else hay switch…case, hãy nghĩ đến các trường hợp mà bạn sắp phải xử lý!
-