Tuesday, April 26, 2011

So sánh swich - case và if - else?

Đề bài

Để tiếp cận vấn đề hiệu quả nhất, tôi sẽ đưa ra bài toán nhỏ như sau: "Viết chương trình nhập một số nguyên từ bàn phím, nếu nhập số 0 thì in ra màn hình 'mau xanh' nếu 1 thì in ra màn hình 'mau do', nếu khác 0 và 1 thì in ra màn hình 'gia tri nhap vao khong dung' ".

Sử dụng if-else

If - else là công cụ tuyệt vời trong trường hợp này:
Hình 1: Bài giải sử dụng lệnh if - else

Sử dụng switch-case

Nhưng chương trình cũng có thể được viết như sau:
Hình 2: Bài giải sử dụng lệnh switch - case

Tôi đã trình bày hai cách làm phổ biến nhất để giải quyết kiểu bài toán nhiều điều kiện đầu vào như đề bài. Hãy chắc chắn răng bạn đã biết rõ về lệnh switch case nhé: switch - case

So sánh if-else với switch-case

Đến đây sẽ có nhiều bạn tự hỏi tại sao lại có lệnh switch - case trong khi if - else hoàn toàn có thể giải quyết được vấn đề tương tự?

Cũng đề bài trên những bây giờ tôi bổ sung lại điều kiện như sau: "nhập số nguyên có giá trị từ 0 đến 99 và sau đó in ra 100 màu tương ứng khác nhau".
Trong trường hợp này, tôi sẽ giải thích vì sao lại phải có switch - case với 3 lý do chính như sau:
  • Switch - case sẽ giúp cấu trúc chương trình rõ ràng, dễ đọc, dễ hiểu hơn so với if-else.
  • Switch - case sẽ kiểm tra 1 biến để thực hiện 100 trường hợp khác nhau, còn if else phải kiểm tra 100 điều kiện để thực hiện 100 trường hợp khác nhau.
  • Giả sử số điều kiện lên đến 1000, nếu sử dụng if-else thì R.I.P cho anh lập trình viên ^^, vì phải viết rất nhiều biểu thức điều kiện có thể gây ra những nhầm lẫn không đáng có.
Đã có nhiều người muốn so sánh để tìm ra sự khác biệt về hiệu suất chương trình (tốc độ, khả năng tiêu tốn bộ nhớ ...) của hai câu lệnh swich-case và if-else nhưng hầu như không có sự khác biệt nào về hiệu suất giữa chúng.

Lời khuyên của tôi là: Trong trường hợp số điều kiện nhiều bạn nên dùng switch case, còn nếu số điều kiện ít việc dùng if-else hay switch-case đơn giản chỉ là sở thích của bạn. 

3 comments: