Điều khiển vòng lặp

Mục đích

Các câu lệnh điều khiển vòng lặp giúp thay đổi luồng thực thi khi đang lặp. Thông dụng nhất là break để dừng hẳn vòng lặp và continue để bỏ qua phần còn lại của lần lặp hiện tại.

Ví dụ với break

for number in range(1, 10):
    if number == 5:
        break
    print(number)
program BreakDemo;

var
  number: Integer;

begin
  for number := 1 to 9 do
  begin
    if number = 5 then Break;
    Writeln(number);
  end;
end.
#include <stdio.h>

int main(void) {
    int number;

    for (number = 1; number < 10; number++) {
        if (number == 5) {
            break;
        }
        printf("%d\n", number);
    }

    return 0;
}
#include <iostream>
using namespace std;

int main() {
    for (int number = 1; number < 10; number++) {
        if (number == 5) {
            break;
        }
        cout << number << endl;
    }

    return 0;
}
for (int number = 1; number < 10; number++)
{
    if (number == 5)
    {
        break;
    }
    Console.WriteLine(number);
}
for (let number = 1; number < 10; number++) {
    if (number === 5) {
        break;
    }
    console.log(number);
}
for (let number: number = 1; number < 10; number++) {
    if (number === 5) {
        break;
    }
    console.log(number);
}
package main

import "fmt"

func main() {
    for number := 1; number < 10; number++ {
        if number == 5 {
            break
        }
        fmt.Println(number)
    }
}
fn main() {
    for number in 1..10 {
        if number == 5 {
            break;
        }
        println!("{}", number);
    }
}

Ví dụ với continue

for number in range(1, 8):
    if number % 2 == 0:
        continue
    print(number)
program ContinueDemo;

var
  number: Integer;

begin
  for number := 1 to 7 do
  begin
    if number mod 2 = 0 then Continue;
    Writeln(number);
  end;
end.
#include <stdio.h>

int main(void) {
    int number;

    for (number = 1; number < 8; number++) {
        if (number % 2 == 0) {
            continue;
        }
        printf("%d\n", number);
    }

    return 0;
}
#include <iostream>
using namespace std;

int main() {
    for (int number = 1; number < 8; number++) {
        if (number % 2 == 0) {
            continue;
        }
        cout << number << endl;
    }

    return 0;
}
for (int number = 1; number < 8; number++)
{
    if (number % 2 == 0)
    {
        continue;
    }
    Console.WriteLine(number);
}
for (let number = 1; number < 8; number++) {
    if (number % 2 === 0) {
        continue;
    }
    console.log(number);
}
for (let number: number = 1; number < 8; number++) {
    if (number % 2 === 0) {
        continue;
    }
    console.log(number);
}
package main

import "fmt"

func main() {
    for number := 1; number < 8; number++ {
        if number%2 == 0 {
            continue
        }
        fmt.Println(number)
    }
}
fn main() {
    for number in 1..8 {
        if number % 2 == 0 {
            continue;
        }
        println!("{}", number);
    }
}

Ghi chú theo ngôn ngữ

Thông tin</div>

Free Pascal hỗ trợ BreakContinue như các thủ tục có sẵn. Lưu ý viết hoa chữ đầu theo phong cách Pascal, dù phiên bản nhỏ thường không phân biệt hoa thường.

Python còn có mệnh đề else đi kèm vòng lặp để xử lý khi vòng lặp kết thúc tự nhiên mà không gặp break.

C dùng break để thoát khỏi vòng lặp gần nhất (không phải tất cả vòng lặp lồng nhau). continue bỏ qua phần còn lại của bước lặp hiện tại và tiếp tục kiểm tra điều kiện.

C++ dùng breakcontinue giống hệt C. Trong các vòng lặp lồng nhau nhiều tầng, break chỉ thoát một tầng — cần kết hợp với cờ (flag) hoặc goto để thoát ra nhiều tầng cùng lúc (hiếm dùng).

C# dùng breakcontinue như C/C++. break trong switch-case cũng dùng tương tự. C# không có labelled break như Java; mánh lego thường dùng là bọ trong hàm riêng.

JavaScript hỗ trợ breakcontinue có nhãn (labeled): outerLoop: for (...) { for (...) { break outerLoop; } }. Đây là cách thoát vòng lặp ngoài từ bên trong.

TypeScript kế thừa labelled break/continue của JavaScript. Trong code TypeScript hiện đại, các phương pháp này hiếm khi cần nếu chương trình được tổ chức tốt.

Go hỗ trợ labelled breakcontinue tương tự JavaScript. Cú pháp: outerLoop: đặt trước vòng lặp, sau đó break outerLoop thoát ra khỏi đúng vòng lặp đó.

Rust dùng breakcontinue. Vòng lặp có thể đặt nhãn: 'outer: loop { ... break 'outer; }. break có thể trả về giá trị: let result = loop { ... break value; }.

Kết luận

breakcontinue giúp mã ngắn gọn hơn trong một số bài toán, nhưng lạm dụng chúng có thể làm luồng điều khiển khó theo dõi. Chỉ nên dùng khi thật sự làm cho ý nghĩa chương trình rõ hơn.

Bình luận