
Chào các chiến thần code tương lai, anh Creyt đây! Hôm nay, chúng ta sẽ mổ xẻ một 'nút bấm' cực kỳ quyền năng trong thế giới vòng lặp của C++: continue. Nghe tên thôi đã thấy nó 'tiếp tục' rồi đúng không? Nhưng tiếp tục như thế nào, và nó khác gì với việc 'phanh gấp' (break)? Cùng tìm hiểu nhé!
continue: Nút "Skip" thần thánh của vòng lặp
Trong lập trình, vòng lặp (như for, while, do-while) giống như một bộ phim dài tập mà bạn phải xem đi xem lại nhiều lần. Mỗi lần lặp là một 'tập phim'. Đôi khi, đang xem dở một tập, tự nhiên có một đoạn quảng cáo dài lê thê, hay một phân cảnh bạn thấy chán phèo muốn tua nhanh qua luôn. Thay vì tắt hẳn phim (kiểu break), bạn chỉ muốn bỏ qua đoạn này và nhảy sang cảnh tiếp theo của tập phim đó, hoặc sang tập phim mới luôn. Đó chính xác là những gì continue làm!
Khi trình biên dịch gặp từ khóa continue bên trong một vòng lặp, nó sẽ:
- Ngừng ngay lập tức việc thực thi các câu lệnh còn lại trong lần lặp hiện tại.
- Chuyển quyền điều khiển đến phần cập nhật của vòng lặp (ví dụ,
i++trongforloop) và sau đó kiểm tra điều kiện để bắt đầu lần lặp tiếp theo.
Nói cách khác, nó là nút "Skip Ad" hoặc "Next Song" trong playlist của bạn. Không dừng cả playlist, chỉ bỏ qua bài hát hiện tại nếu nó không hợp gu thôi.
Code Ví Dụ Minh Họa: Lọc số chẵn, bỏ qua số chia hết cho 3
Giả sử bạn muốn in ra các số từ 1 đến 10, nhưng chỉ in các số chẵn. Đặc biệt hơn, nếu gặp một số chia hết cho 3, bạn muốn bỏ qua luôn cả việc kiểm tra chẵn/lẻ của nó, nhảy sang số tiếp theo luôn. Đây là lúc continue tỏa sáng.
#include <iostream>
int main() {
std::cout << "Danh sach cac so chan (khong chia het cho 3) tu 1 den 10:\n";
for (int i = 1; i <= 10; ++i) {
// Buoc 1: Kiem tra dieu kien 'continue'
if (i % 3 == 0) {
std::cout << " Bo qua so " << i << " (chia het cho 3)\n";
continue; // Bo qua phan con lai cua lan lap nay, chuyen sang i+1
}
// Buoc 2: Neu khong bi 'continue', moi thuc hien phan code nay
if (i % 2 == 0) {
std::cout << " So chan: " << i << "\n";
}
}
return 0;
}
Giải thích code ví dụ:
- Vòng lặp
forchạy từi = 1đến10. - Khi
ilà1,1 % 3 != 0,1 % 2 != 0. Không in gì. - Khi
ilà2,2 % 3 != 0,2 % 2 == 0. In:So chan: 2. - Khi
ilà3,3 % 3 == 0. Lệnhcontinueđược gọi. Chương trình bỏ qua dòngif (i % 2 == 0)và các lệnh sau đó trong lần lặp này. Nó nhảy thẳng đến++i(tức làithành4), sau đó kiểm tra điều kiện vòng lặp để bắt đầu lần lặp mới. - Khi
ilà4,4 % 3 != 0,4 % 2 == 0. In:So chan: 4. - Và cứ thế... Khi
ilà6, nó lại bịcontinuebỏ qua vì6 % 3 == 0. Tương tự vớii = 9.
Kết quả bạn sẽ thấy các số 3, 6, 9 bị 'skip' và không được kiểm tra chẵn/lẻ, chỉ có 2, 4, 8, 10 là số chẵn được in ra.

Mẹo (Best Practices) để ghi nhớ và dùng thực tế
- "Nhảy cóc" thông minh: Hãy coi
continuenhư một cách để bạn "nhảy cóc" qua những trường hợp không cần xử lý trong một lần lặp. Nó giúp code của bạn gọn gàng hơn, tránh phải lồng quá nhiềuif-elsephức tạp. - Đọc ngược lại: Khi thấy
continue, hãy nghĩ: "Nếu điều kiện này đúng, thì toàn bộ phần còn lại của lần lặp này sẽ không được chạy. Hãy chuyển sang lần lặp kế tiếp." - Không lạm dụng: Mặc dù mạnh mẽ, nhưng việc sử dụng
continuequá nhiều hoặc trong các điều kiện phức tạp có thể làm code khó đọc và khó debug hơn. Đôi khi, một cấu trúcifđơn giản có thể rõ ràng hơn. - Luôn có điều kiện:
continueluôn đi kèm với một điều kiện (if). Không có điều kiện thì nó sẽ biến vòng lặp thành một vòng lặp vô hạn (nếu điều kiện vòng lặp không thay đổi) hoặc bỏ qua mọi thứ.
Ứng dụng thực tế (Harvard-style, dễ hiểu tuyệt đối)
Trong các hệ thống lớn, continue thường được dùng để tối ưu hóa hiệu suất và xử lý các trường hợp ngoại lệ:
- Xử lý dữ liệu lớn (Big Data Processing): Khi đọc hàng triệu dòng dữ liệu từ một file log hoặc database, nếu một dòng nào đó bị lỗi định dạng, thiếu thông tin quan trọng, hoặc không phù hợp với tiêu chí xử lý hiện tại, bạn có thể dùng
continueđể bỏ qua dòng đó và chuyển sang dòng tiếp theo ngay lập tức. Điều này giúp tránh lãng phí tài nguyên CPU cho dữ liệu không hợp lệ. - Game Development (Game Loop): Trong game, vòng lặp chính (game loop) liên tục cập nhật trạng thái của hàng trăm, hàng ngàn đối tượng. Nếu một kẻ địch đang ở ngoài màn hình, hoặc một vật phẩm đã bị nhặt, bạn có thể dùng
continueđể bỏ qua việc tính toán AI, render đồ họa cho đối tượng đó trong lần lặp hiện tại. Điều này giảm tải đáng kể cho engine game. - Web Servers/API Handlers: Khi một máy chủ web nhận được hàng ngàn yêu cầu (requests), mỗi yêu cầu cần được xác thực hoặc kiểm tra các header. Nếu một request có header bị thiếu, token không hợp lệ, hoặc không đáp ứng các tiêu chí bảo mật ban đầu, server có thể
continueđể từ chối xử lý request đó và chuyển sang request tiếp theo, tránh các tác vụ nặng hơn cho một yêu cầu không hợp lệ. - Xử lý input người dùng (User Input Validation): Trong các ứng dụng console hoặc form web, khi người dùng nhập dữ liệu, bạn có thể dùng
continuetrong vòng lặp kiểm tra để yêu cầu họ nhập lại nếu dữ liệu không đúng định dạng, mà không cần thoát khỏi quá trình nhập liệu chính.
Thử nghiệm và hướng dẫn nên dùng cho case nào
Khi nào nên dùng continue?
continue là lựa chọn tuyệt vời khi bạn có một điều kiện cụ thể trong vòng lặp mà nếu điều kiện đó đúng, bạn chỉ muốn bỏ qua phần còn lại của LẦN LẶP HIỆN TẠI và chuyển sang lần lặp kế tiếp. Nó giúp bạn tránh phải viết các khối else lớn hoặc lồng quá nhiều if để bao bọc các logic xử lý chính.
Thử nghiệm tại nhà:
Hãy thử sửa đổi ví dụ trên. Thay vì dùng continue, bạn hãy thử dùng một if lồng nhau để đạt được kết quả tương tự. Bạn sẽ thấy code có thể trở nên phức tạp hơn một chút. Ví dụ:
#include <iostream>
int main() {
std::cout << "Danh sach cac so chan (khong chia het cho 3) tu 1 den 10 (dung if long nhau):\n";
for (int i = 1; i <= 10; ++i) {
if (i % 3 != 0) { // Chi xu ly neu khong chia het cho 3
if (i % 2 == 0) {
std::cout << " So chan: " << i << "\n";
}
}
}
return 0;
}
Cả hai cách đều cho cùng một kết quả, nhưng cách dùng continue thường được ưa chuộng hơn khi điều kiện để bỏ qua là rõ ràng và đơn giản, giúp code dễ đọc hơn bằng cách đưa các điều kiện "loại trừ" lên đầu vòng lặp. Nó giống như việc bạn đặt một biển báo "Cấm vào" ở đầu đường để không ai phải đi vào rồi mới quay đầu vậy.
Vậy là, continue không chỉ là một từ khóa, nó là một công cụ mạnh mẽ giúp bạn điều khiển luồng chương trình một cách linh hoạt, hiệu quả, đặc biệt khi xử lý các tập dữ liệu lớn hoặc các tình huống cần bỏ qua có điều kiện. Hãy dùng nó một cách thông minh, và bạn sẽ thấy code của mình "mượt mà" hơn rất nhiều!
Thuộc Series: C++
Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!