Vòng lặp for

Mục đích

for thích hợp khi số lần lặp đã được xác định trước hoặc khi có một dãy giá trị cần duyệt tuần tự. Đây là cấu trúc lặp thường gặp nhất trong các bài nhập môn.

Sơ đồ luồng

graph TD; A((Bắt đầu)) --> B[Khởi tạo\nbiến điều khiển]; B --> C{Kiểm tra\nđiều kiện?}; C -- Sai --> F((Kết thúc\nvòng lặp)); C -- Đúng --> D[Thực hiện\nkhối lệnh]; D --> E[Cập nhật\nbiến điều khiển]; E --> C;

Ví dụ đếm từ 1 đến 5

for number in range(1, 6):
    print(number)
program ForLoopDemo;

var
  number: Integer;

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

int main(void) {
    int number;

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

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

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

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

import "fmt"

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

Thành phần quan trọng

  • Giá trị bắt đầu hoặc biểu thức khởi tạo.
  • Điều kiện dừng vòng lặp.
  • Cách cập nhật biến điều khiển sau mỗi lần lặp.

Ghi chú theo ngôn ngữ

Thông tin</div>

Python dùng range(start, stop) để sinh dãy số. Giá trị stop không được lấy vào kết quả. Dùng range(1, 6) để lấy 1, 2, 3, 4, 5. Có thể thêm bước nhảy: range(start, stop, step).

Pascal có dạng tăng to và giảm downto. Bước nhảy không được tùy biến trực tiếp như trong nhiều ngôn ngữ khác.

C gom phần khởi tạo, điều kiện và cập nhật vào cùng một dòng tiêu đề của vòng lặp. Điều này linh hoạt nhưng cũng dễ gây khó đọc nếu biểu thức quá dài.

C++ kế thừa cú pháp for (init; condition; post) từ C. Ngoài ra còn có dạng range-based: for (auto x : container) { } duyệt trực tiếp qua từng phần tử của mảng hoặc vector.

C# có hai dạng for: vòng for (int i = 0; i < n; i++) truyền thống và foreach (var item in collection) để duyệt trực tiếp. foreach thường gọn hơn khi không cần chỉ số.

JavaScript có vòng for truyền thống, for...of để duyệt giá trị và for...in để duyệt key của object. Dùng for...of cho mảng, for...in cho object.

TypeScript kế thừa tất cả dạng vòng for từ JavaScript. Ngoài ra TypeScript kiểm tra kiểu của biến lặp, ví dụ trong for (const x: number of numbers) đảm bảo x là số.

Go chỉ có từ khóa for duy nhất cho mọi loại vòng lặp. Cú pháp for init; condition; post { } tương đương for truyền thống trong C.

Rust dùng range 1..=5 (bao gồm cả 5) hoặc 1..6 (không bao gồm 6). Biến number trong for number in 1..=5 tự động được khai báo và không cần khai báo riêng.

Kết luận

Khi không biết chính xác số lần lặp trước khi chương trình chạy, nên chuyển sang Vòng lặp while. Trong mục Thuật toán, vòng lặp for là xương sống của các thuật toán sắp xếptìm kiếm.

Bình luận