Bài 4: Câu lệnh rẽ nhánh trong Javascript

70

I. Giới thiệu

Trong cuộc sống hằng ngày chứ chẳng đi đâu xa, chúng ta hay gặp phải các mệnh đề Nếu … thì … Ví dụ như:

  • Nếu hôm nay trời mưa, thì em sẽ nghỉ học.
  • Nếu hôm nay trời nắng thì em sẽ đi chơi, nếu không thì em sẽ ở nhà.
  • Nếu đỗ đại học, bố sẽ mua cho một chiếc sh, nếu đỗ cao đẳng bố mua cho một chiếc wave tàu, nếu không cả đại học và cao đẳng, thì bố mua cho con trâu.

Trong lập trình nói chung và trong Javascript nói riêng cũng vậy, cũng có các câu lệnh dạng Nếu … thì … Dạng câu lệnh như thế này được gọi là Câu lệnh rẽ nhánh.

II. Câu lệnh if

if là dạng câu lệnh rẽ nhánh được sử dụng phổ biến nhất. Có cấu trúc như sau:

if (dieuKien) {
   // các câu lệnh sẽ được thực hiện
   // nếu dieuKien là true, hoặc tương đương với true như là các số nguyên khác 0
   // các chuỗi số khác "0", và các ký tự khác ký tự chuỗi,...
}

// Hoặc
if (dieuKien) {
    // ...
} else {
    // các câu lệnh sẽ được thực hiện
    // nếu dieuKien là false, hoặc tương đương với false như là số 0, chuỗi "0"
    // và các ký tự chữ chuỗi khác
}

// Hoặc có thể kết hợp cả hai tạo nên
if (dieuKien1) {
   //
} else if (dieuKien2) {
   //
} else if (dieuKien3) {
  //
} else {
  // các câu lệnh sẽ được thực hiện
  // nếu tất cả các điều kiện trên đều sai
}

Một số ví dụ về câu lệnh if

Mình sẽ mô tả lại 3 câu Nếu … thì … mà mình sử dụng ở đầu bài bằng bằng cấu trúc của câu lệnh if nhé.

// 1. Nếu hôm nay trời mưa thì em sẽ đi học
var troiMua = true;
if (troiMua) {
    console.log('Em sẽ đi học');
}

// 2. Nếu hôm nay trời nắng thì em sẽ đi chơi
// nếu không em sẽ ở nhà
var troiNang = true;
if (troiNang) {
    console.log('Em sẽ đi chơi');
} else {
    console.log('Em sẽ ở nhà');
}

// Nếu đỗ đại học, bố sẽ mua cho một chiếc sh,
// nếu đỗ cao đẳng bố mua cho một chiếc wave tàu,
// nếu không cả đại học và cao đẳng, thì bố mua cho con trâu.
var truong = 'dai hoc';
if (truong == 'dai hoc') {
    console.log('Được mua xe sh');
} else if (truong == 'cao dang') {
    console.log('Được mua xe wave tàu');
} else {
    console.log('Mua cho con trâu');
}

Bạn cũng có thể áp dụng các toán tử logic trong điều kiện của câu lệnh if, như trong các ví dụ sau:

var troiNang = false;
var troiMua = false;

if (troiNang == false && troiMua == false) {
   console.log('Trời hôm nay không nắng cũng không mưa');
}

var ngheNghiep = "lap trinh vien";
if (ngheNghiep == "lap trinh vien" || ngheNghiep == "developer") {
    console.log('Auto ế');
}

III. Câu lệnh switch … case

switch ... case... cũng là một dạng của câu lệnh rẽ nhánh, có cấu trúc như sau:

switch (variable) {
    case <case 1>:
        // Các câu lệnh xảy ra
        // nếu variable === <case 1>
        break;
    case <case 2>:
        // Các câu lệnh sẽ thực hiện
        // nếu variable === <case 2>
        break;
    // Chúng ta cũng có thể kết hợp nhiều điều kiện như sau
    case <case 3>:
    case <case 4>:
        // Các câu lệnh sẽ thực hiện
        // nếu variable === <case 3> hoặc variable === <case 4>
        break;

    // case <case n>
    //     ...
    //     break;  

    default:
        // Các câu lệnh sẽ thực hiện
        // nếu variable không bằng bất kỳ case nào ở trên
        // cặp default ... break này có thể không cần xuất hiện
        // trong cấu trúc của switch ... case
        break;
}

Để hiểu hơn, bạn có thể xem ví dụ sau.

Ví dụ: month là biến thể hiện một tháng bất kỳ trong năm (từ 1 đến 12), viết chương trình để hiển thị ra số ngày trong tháng month.

var month = 1;

switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        console.log('31 ngày');
        break;
    case 2:
        // Coi như năm nay là năm nhuận
        console.log('Tháng có 29 ngày');
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        console.log('Tháng có 30 ngày');
        break;
}

if vs switch case

Để ý bạn sẽ thấy cấu trúc của câu lệnh switch ... case ... khá giống với cấu trúc if () ... else if () ... Điều này đồng nghĩa rằng bạn chỉ cần biết câu lệnh if là đủ, vậy tại sao còn sinh ra switch case làm gì? Đây là câu hỏi của mình lúc mới học lập trình và mình tin chắc rằng cũng là câu hỏi của nhiều bạn khác.

Theo như mình tìm hiểu được, nếu một bài toán vừa có thể giải quyết bằng if else if, lại vừa có thể giải quyết bằng switch case, thì sử dụng switch case sẽ có tốc độ thực hiện nhanh hơn (mình cũng chưa kiểm chứng điều này). Tuy nhiên mình không cho rằng đây là lý do mà switch case tồn tại song song với if. Theo mình, lý do mà switch case tồn tại là vì nó có một số đặc điểm riêng như sau:

  • Điều kiện để thực hiện một case là điều kiện bằng và bằng cả về mặt dữ liệu, tương đương với toán tử ===.
  • Trong trường hợp điều kiện là sự kết hợp của nhiều toán tử ||, thì việc viết theo switch case có vẻ dễ nhìn hơn.

Đó chính là lý do mà chúng ta nên sử dụng switch case trong một số trường hợp nhất định thay vì sử dụng if else if.

Quay trở lại ví dụ hiển thị số ngày trong tháng ở trên, nếu mình sử dụng if else if thay vì switch case thì nó sẽ nhìn như thế này:

var month = 1;

if (month === 1
    || month === 3
    || month === 5
    || month === 7
    || month === 8
    || month === 10
    || month === 12
) {
    console.log('31 ngày');
} else if (month === 2) {
    // Coi như năm nay là năm nhuận
    console.log('Tháng có 29 ngày');
} else if (month === 4
    month === 6
    month === 9
    month === 11
) {
    console.log('Tháng có 30 ngày');
}

Nhìn khó đọc hơn chút xíu đúng không, và mình luôn phải chú ý tới việc sử dụng toán tử === nữa.

IV. Tổng kết

Qua bài viết này, các bạn đã biết cách sử dụng câu lệnh rẽ nhánh if, và switch case. Mình lưu ý lại một số vấn đề trọng tâm như sau:

  • if else có 4 dạng hay dùng:
    • if () { }
    • if () { } else { }
    • if () else if () { } else if () { }
    • if () else if () { } else if () { } else { }
  • Một bài toán có thể giải quyết bằng switch case thì cũng có thể giải quyết bằng if. Vì vậy hãy biết cách sử dụng switch case trong những trường hợp cần thiết.

Hẹn gặp lại bạn trong những bài viết tiếp theo.