Trong lập trình, vòng lặp là một trong những cấu trúc điều khiển cơ bản và mạnh mẽ nhất. Chúng cho phép bạn thực hiện một khối lệnh nhiều lần mà không cần phải viết lại code. Tuy nhiên, việc lựa chọn đúng loại vòng lặp cho từng trường hợp cụ thể là điều mà nhiều người mới học lập trình thường băn khoăn.

Vậy, khi nào chúng ta nên dùng for, khi nào nên dùng while, và khi nào thì do...while là lựa chọn tốt nhất?

1. Vòng lặp for: Dùng khi bạn đã biết trước số lần lặp

Vòng lặp for là loại vòng lặp được sử dụng phổ biến nhất khi bạn đã biết chính xác hoặc có thể xác định được số lần lặp. Cú pháp của nó thường bao gồm ba phần: khởi tạo biến, điều kiện lặp, và biểu thức cập nhật, tất cả đều nằm gọn trong dấu ngoặc đơn.

Cấu trúc cơ bản:

js
for (khởi_tạo_biến; điều_kiện_lặp; cập_nhật_biến) {
  // Khối lệnh sẽ được thực thi
}

Ví dụ thực tế:

Giả sử bạn muốn in ra các số từ 1 đến 10. Bạn biết rõ vòng lặp sẽ chạy 10 lần. Đây là lúc for phát huy hiệu quả.

js
for (let i = 1; i <= 10; i++) {
  console.log(i); // In ra 1, 2, 3, ..., 10
}

Một số trường hợp nên dùng for:

  • Lặp qua các phần tử của một mảng.
  • Thực hiện một tác vụ N lần.
  • Tạo ra một chuỗi các số có quy luật.

2. Vòng lặp while: Dùng khi bạn không biết trước số lần lặp

Ngược lại với for, vòng lặp while được dùng khi bạn không biết chính xác số lần lặp. Vòng lặp này sẽ tiếp tục chạy miễn là điều kiện của nó vẫn còn đúng. Điều kiện này được kiểm tra trước mỗi lần lặp.

Cấu trúc cơ bản:

js
while (điều_kiện_lặp) {
  // Khối lệnh sẽ được thực thi
  // Cập nhật biến để vòng lặp có thể dừng
}

Ví dụ thực tế:

Giả sử bạn cần hỏi người dùng nhập một số dương. Bạn sẽ không biết họ phải nhập sai bao nhiêu lần trước khi nhập đúng.

js
let soNhapVao = -1;

while (soNhapVao <= 0) {
  soNhapVao = prompt("Hãy nhập một số dương:");
  if (isNaN(soNhapVao)) {
    soNhapVao = -1; // Đảm bảo vòng lặp tiếp tục nếu không phải là số
  }
}
alert("Số bạn nhập là: " + soNhapVao);

Ở đây, vòng lặp while sẽ tiếp tục chạy cho đến khi người dùng nhập vào một số lớn hơn 0.

Một số trường hợp nên dùng while:

  • Đọc dữ liệu từ một luồng (stream) cho đến khi gặp điểm kết thúc.
  • Kiểm tra một điều kiện liên tục, ví dụ như chờ người dùng nhập đúng thông tin.
  • Thực hiện một tác vụ cho đến khi một sự kiện xảy ra.

3. Vòng lặp do...while: Lặp ít nhất một lần

Vòng lặp do...while cũng tương tự như while, nhưng có một điểm khác biệt quan trọng: khối lệnh sẽ được thực thi ít nhất một lần, sau đó mới kiểm tra điều kiện lặp.

Cấu trúc cơ bản:

js
do {
  // Khối lệnh sẽ được thực thi
} while (điều_kiện_lặp);

Ví dụ thực tế:

Trở lại ví dụ hỏi người dùng nhập số dương. Với do...while, chúng ta có thể viết code gọn hơn, vì chúng ta chắc chắn cần hỏi người dùng ít nhất một lần.

js
let soNhapVao;

do {
  soNhapVao = prompt("Hãy nhập một số dương:");
  if (isNaN(soNhapVao)) {
    soNhapVao = -1; // Đảm bảo điều kiện vẫn sai nếu không phải số
  }
} while (soNhapVao <= 0);

alert("Số bạn nhập là: " + soNhapVao);

Trong ví dụ này, câu lệnh prompt sẽ được gọi lần đầu tiên mà không cần kiểm tra điều kiện.

Một số trường hợp nên dùng do...while:

  • Khi bạn cần thực thi một tác vụ ít nhất một lần, ví dụ như hiển thị menu và chờ người dùng chọn.
  • Khi bạn cần đảm bảo rằng một khối lệnh được chạy trước khi kiểm tra điều kiện.

Bảng tóm tắt:

Tiêu chíforwhiledo...while
Khi nào dùng?Khi biết trước số lần lặp.Khi không biết trước số lần lặp.Khi muốn khối lệnh chạy ít nhất một lần.
Kiểm tra điều kiệnTrước khi vòng lặp bắt đầu.Trước mỗi lần lặp.Sau khi vòng lặp kết thúc lần đầu.
Số lần lặp tối thiểu0 lần (nếu điều kiện sai ngay từ đầu).0 lần (nếu điều kiện sai ngay từ đầu).1 lần.
Cú phápGọn gàng, tất cả trong một dòng.Đơn giản, chỉ có điều kiện.Tách biệt dowhile.

Lời kết

Việc lựa chọn đúng loại vòng lặp không chỉ giúp code của bạn rõ ràng, dễ đọc hơn mà còn tránh được những lỗi logic không đáng có.

  • Nếu bạn cần lặp một số lần cố định, hãy nghĩ ngay đến for.
  • Nếu bạn cần lặp cho đến khi một điều kiện nào đó không còn đúng và không biết trước số lần lặp, while là lựa chọn phù hợp.
  • Và nếu bạn cần đảm bảo khối lệnh được chạy ít nhất một lần, do...while là giải pháp tối ưu.

Hãy thực hành thật nhiều với cả ba loại vòng lặp để nắm vững cách sử dụng chúng một cách hiệu quả nhất nhé!