Vòng lặp while

Mục đích

while được dùng khi số lần lặp phụ thuộc vào điều kiện được kiểm tra ở đầu mỗi vòng. Vòng lặp tiếp tục chừng nào điều kiện còn đúng.

Sơ đồ luồng

graph TD; A((Bắt đầu)) --> B{Kiểm tra\nđiều kiện}; B -- Sai --> F((Kết thúc\nvòng lặp)); B -- Đúng --> D[Thực hiện lệnh]; D --> B;

Ví dụ đếm ngược

count = 3

while count > 0:
    print(count)
    count -= 1
program WhileLoopDemo;

var
  count: Integer;

begin
  count := 3;

  while count > 0 do
  begin
    Writeln(count);
    count := count - 1;
  end;
end.
#include <stdio.h>

int main(void) {
    int count = 3;

    while (count > 0) {
        printf("%d\n", count);
        count--;
    }

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

int main() {
    int count = 3;

    while (count > 0) {
        cout << count << endl;
        count--;
    }

    return 0;
}
int count = 3;

while (count > 0)
{
    Console.WriteLine(count);
    count--;
}
let count = 3;

while (count > 0) {
    console.log(count);
    count--;
}
let count: number = 3;

while (count > 0) {
    console.log(count);
    count--;
}
package main

import "fmt"

func main() {
    count := 3

    for count > 0 {
        fmt.Println(count)
        count--
    }
}
fn main() {
    let mut count = 3;

    while count > 0 {
        println!("{}", count);
        count -= 1;
    }
}

Điều cần chú ý

  • Điều kiện được kiểm tra trước khi thân vòng lặp chạy.
  • Nếu điều kiện sai ngay từ đầu, vòng lặp có thể không chạy lần nào.
  • Biến điều khiển phải được cập nhật hợp lý để tránh vòng lặp vô hạn.

Ghi chú theo ngôn ngữ

Thông tin</div>

Python dùng thụt lề để phân định thân vòng lặp. Không có dấu ngoặc nhọn hay do/end. Điều kiện không cần đặt trong ().

Khi thân vòng lặp có nhiều hơn một câu lệnh, Pascal cần dùng begin ... end để gom thành một khối. Pascal không có toán tử -- hay ++ như C.

C cho phép viết toán tử giảm count--. Đây là cú pháp ngắn gọn cho phép trừ đi 1 sau mỗi lần lặp. Tương tự, count++ tăng lên 1.

C++ kế thừa cú pháp while từ C. Toán tử count++count-- dùng được bình thường. Trong C++ có thể khai báo biến ngay trong điều kiện while với cú pháp scope hẹp hơn.

C# yêu cầu điều kiện while phải có kiểu bool. Không thể dùng số nguyên như điều kiện (khác với C/C++). Toán tử --++ dùng được bình thường.

JavaScript cho phép giá trị “truthy/falsy” trong điều kiện while. Vì vậy while (array.length) hợp lệ và kết thúc khi mảng rỗng. Cẩn thận với kiểu dữ liệu không tường minh.

TypeScript kiểm tra kiểu của điều kiện chặt hơn. Nếu bật strict mode, một số biểu thức truthy/falsy của JavaScript sẽ bị cảnh báo. Nên dùng điều kiện boolean rõ ràng.

Go không có từ khóa while riêng. Cú pháp for condition { } thực hiện vai trò của vòng lặp while. Biến cần khai báo bằng var hoặc := bên ngoài vòng lặp.

Rust yêu cầu khai báo biến có thể thay đổi bằng let mut. Không khai báo mut sẽ gây lỗi biên dịch khi thay đổi giá trị biến. count -= 1 thay cho count-- (Rust không có --).

Kết luận

while phù hợp cho các bài toán lặp đến khi đạt điều kiện mong muốn. Khi muốn chắc chắn thân vòng lặp chạy ít nhất một lần, bài tiếp theo sẽ là dạng do-while hoặc cấu trúc tương đương.

Bình luận