Vòng lặp điều kiện bắt đầu trong ngôn ngữ E
Cú pháp cơ bản
Vòng lặp điều kiện là cấu trúc kiểm soát lặp quan trọng trong ngôn ngữ E, có cú pháp đầy đủ như sau:
Vòng lặp điều kiện bắt đầu (biểu thức điều kiện)
' Code block của vòng lặp
' Có thể chứa nhiều mệnh đề
Vòng lặp điều kiện kết thúc ()
Hoạt động chi tiết
Kiểm tra điều kiện ban đầu
Biên dịch chương trình sẽ xử lý biểu thức bên trong dấu ngoặc, có thể là:
- So sánh logic đơn giản (ví dụ:
a > bhoặcx == y) - Tích hợp logic phức tạp (ví dụ:
(x=1) và (y<10)hoặc(a+b)*c >= 100) - Giá trị trả về của hàm (ví dụ:
tồn tại file("test.txt")hoặccơ sở dữ liệu.trạng thái_kết_nối()) - Biến hoặc hằng số (ví dụ:
đúnghoặcsai)
Quy trình xử lý điều kiện
Khi kết quả biểu thức là_True_ (non-zero):
- Vào body vòng lặp để thực thi code
- Thực thi theo thứ tự từ trên xuống dưới
- Thực hiện từng mệnh đề một, bao gồm gán biến, gọi hàm, v.v.
- Khi gặp
đến vòng lặp kết thúc()thì nhảy qua phần còn lại và quay lại vòng lặp đầu
Khi kết quả biểu thức là_False_ (zero):
- Bỏ qua toàn bộ cấu trúc vòng lặp
- Thực thi mệnh đề sau vòng lặp kết thúc
- Không thực thi bất kỳ phần nào trong body vòng lặp
Cơ chế thực thi vòng lặp
Sau khi実 thi xong body vòng lặp, gặp vòng lặp kết thúc:
- Nhảy quay lại đầu vòng lặp
- Tính lại giá trị biểu thức điều kiện
- Xác định có tiếp tục vòng lặp hay không dựa trên kết quả mới
- Quy trình này sẽ lặp lại cho đến khi kết quả là_False_
Điều kiện kết thúc vòng lặp
Khi kết quả biểu thức là_False_:
- Thoát khỏi cấu trúc vòng lặp
- Tiếp tục thực thi code sau đó
- Giải phóng các tài nguyên hệ thống được sử dụng
- Cũng có thể sử dụng
bỏ qua vòng lặp()để ép buộc thoát vòng lặp
Ứng dụng điển hình
1. Trường hợp待ち điều kiện
' Đợi file tải xuống hoàn tất
Biến Kiểu Tĩnh Mảng Ghi chú
timmer_tren_gio Số nguyên
duong_dan_file Chuỗi
Tên file = "C:\Downloads\Tài liệu quan trọng.zip"
timmer_tren_gio = 0
' Cài đặt thanh tiến trình ban đầu
thanh_tien_trinh1.max = 300
thanh_tien_trinh1.value = 0
Vòng lặp điều kiện bắt đầu (không_tồn_tại_file(duong_dan_file) và timmer_tren_gio < 300)
' Cập nhật thanh tiến trình
thanh_tien_trinh1.value = thanh_tien_trinh1.value + 1
' Hiển thị thông báo
label1.text = "Đang tải file, vui lòng chờ..." + str(thanh_tien_trinh1.value/3) + "%"
' Bảo vệ giao diện
xử_lý_event()
' Tạo khoảng dừng
_Delay_(200) ' 200 miliseconds
' Bảo vệ an toàn
timmer_tren_gio = timmer_tren_gio + 1
Vòng lặp điều kiện kết thúc ()
Nếu (timmer_tren_gio >= 300)
.MessageBox("Tải file bị timeout!", 0, "Cảnh báo", )
Ngược lại
.MessageBox("Tải file thành công!", 0, "Thông báo", )
2. Giám sát thiết bị
' Giám sát trạng thái打印机
Biến Kiểu Tĩnh Mảng Ghi chú
gio_bat_dau Thời gian
tên_print Chuỗi
tên_print = "HP LaserJet 1020"
gio_bat_dau = lấy_thời_gian_bây_giờ()
' Cài đặt khoảng thời gian giám sát (mili giây)
hằng số khoảng_thời_gian = 500
Vòng lặp điều kiện bắt đầu (không_sẵn_sàng_print(tên_print))
' Tính toán thời gian chờ
Biến time_wait = tính_thời_gian(rút_thời_gian_bây_giờ(), gio_bat_dau)
' Cập nhật trạng thái
label1.text = "Đang chờ打印机[" + tên_print + "]sẵn sàng..." + "Đã chờ: " + str(time_wait) + " giây"
' Bảo vệ giao diện
xử_lý_event()
' Tạo khoảng dừng để tránh CPU quá tải
_Delay_(khoảng_thời_gian)
' Bảo vệ an toàn timeout 30 giây
Nếu (time_wait > 30)
.MessageBox("Printersẵn sàng timeout, vui lòng kiểm tra lại!", 0, "Lỗi in ấn", )
Bỏ qua vòng lặp()
' Kiểm tra nút hủy
Nếu (nút_cancel.check)
.MessageBox("Người dùng đã hủy thao tác in", 0, "Thông báo", )
Bỏ qua vòng lặp()
Vòng lặp điều kiện kết thúc ()
Nếu (sẵn_sàng_print(tên_print))
MessageBox("Printersẵn sàng, có thể in được", 0, "Thông báo", )
3. Xử lý dữ liệu lặp
' Xử lý mảng dữ liệu cho đến khi xong
Biến Kiểu Tĩnh Mảng Ghi chú
index Số nguyên
dữ_liệu_mảng Chuỗi 0
kết_quả_xử_lý Logical
thông_báo_lỗi Chuỗi
' Tạo mảng ban đầu
dữ_liệu_mảng = {"Thông tin khách hàng", "Đơn hàng", "Kho hàng", "Tài chính", "Lịch sử"}
' Cài đặt thanh tiến trình
thanh_tien_trinh1.min = 1
thanh_tien_trinh1.max = upper_bound(dữ_liệu_mảng)
thanh_tien_trinh1.value = 0
index = 1
Vòng lặp điều kiện bắt đầu (index ≤ upper_bound(dữ_liệu_mảng))
' Hiển thị phần tử hiện tại
label_trạng_thái.text = "Đang xử lý: " + dữ_liệu_mảng[index] + " (" + str(index) + "/" + str(upper_bound(dữ_liệu_mảng)) + ")"
' Xử lý phần tử hiện tại
kết_quả_xử_lý = xử_lý_dữ_liệu(dữ_liệu_mảng[index], thông_báo_lỗi)
' Nếu xử lý thất bại thì thoát vòng lặp
Nếu (kết_quả_xử_lý = False)
MessageBox("Xử lý dữ liệu thất bại ở[" + dữ_liệu_mảng[index] + "]với lỗi: " + thông_báo_lỗi, 0, "Lỗi xử lý", )
Bỏ qua vòng lặp()
' Cập nhật index
index = index + 1
' Cập nhật thanh tiến trình
thanh_tien_trinh1.value = index - 1
' Bảo vệ giao diện
xử_lý_event()
' Tạo khoảng dừng
_Delay_(100)
Vòng lặp điều kiện kết thúc ()
Nếu (index > upper_bound(dữ_liệu_mảng))
MessageBox("Toàn bộ dữ liệu đã được xử lý!", 0, "Hoàn thành", )
Ví dụ chi tiết
Window program name Keep Keep Note
Window program_start_window
Subroutine name Return type Public Note
_button_start_xử_lý_bị_bấm
Biến Kiểu Tĩnh Mảng Ghi chú
lógic_value Logical
counter Số nguyên
gio_bat_dau Thời gian
số_lần_loop_max Số nguyên
thời_gian_xử_lý_max Số nguyên
' Cài đặt ban đầu
số_lần_loop_max = 100
thời_gian_xử_lý_max = 10 ' giây
' Tạo các biến cần thiết
lógic_value = True
counter = 0
gio_bat_dau = lấy_thời_gian_bây_giờ()
' Cài đặt lại giao diện
label_trạng_thái.text = "Sẵn sàng xử lý..."
thanh_tien_trinh_xử_lý.value = 0
thanh_tien_trinh_xử_lý.max = số_lần_loop_max
' Ví dụ vòng lặp có nhiều giới hạn an toàn
Vòng lặp điều kiện bắt đầu (lógic_value = True và counter < số_lần_loop_max và tính_thời_gian(rút_thời_gian_bây_giờ(), gio_bat_dau) < thời_gian_xử_lý_max)
' Cập nhật giao diện
label_trạng_thái.text = "Đang xử lý, đã lặp " + str(counter) + " lần, đã tốn: " + str(tính_thời_gian(rút_thời_gian_bây_giờ(), gio_bat_dau)) + " giây"
thanh_tien_trinh_xử_lý.value = counter
' Thực thi logic chính
lógic_value = kiểm_tra_function()
' Cập nhật counter
counter = counter + 1
' Tối ưu hiệu năng
Nếu (counter % 5 == 0)
' Dọn dẹp bộ nhớ sau mỗi 5 lần lặp
dọn_dẹp_bộ_nhớ()
label_bộ_nhớ.text = "Lần dọn dẹp gần đây nhất: " + str(rút_thời_gian_bây_giờ())
' Kiểm tra nút tạm dừng
Nếu (nút_tạm_dừng.check)
MessageBox("Xử lý đã tạm dừng", 0, , )
Vòng lặp điều kiện bắt đầu (nút_tạm_dừng.check)
xử_lý_event()
_Delay_(100)
Vòng lặp điều kiện kết thúc ()
' Tạo khoảng dừng
_Delay_(50) ' 50 miliseconds
' Bảo vệ giao diện
xử_lý_event()
Vòng lặp điều kiện kết thúc ()
' Xử lý sau khi vòng lặp kết thúc
Nếu (counter >= số_lần_loop_max)
MessageBox("Đã đạt số lần lặp tối đa " + str(số_lần_loop_max), 0, "Hoàn thành", )
Nếu (tính_thời_gian(rút_thời_gian_bây_giờ(), gio_bat_dau) >= thời_gian_xử_lý_max)
MessageBox("Đã đạt giới hạn thời gian xử lý " + str(thời_gian_xử_lý_max) + " giây", 0, "Timeout", )
Nếu (lógic_value = False)
MessageBox("Có lỗi xảy ra trong quá trình xử lý", 0, "Lỗi", )
' Cập nhật trạng thái sau khi xử lý
label_trạng_thái.text = "Xử lý hoàn thành, tổng cộng đã lặp " + str(counter) + " lần"
thanh_tien_trinh_xử_lý.value = thanh_tien_trinh_xử_lý.max
Kỹ thuật sử dụng cao cấp
1. Kết hợp điều kiện phức tạp
Biến Kiểu Tĩnh Mảng Ghi chú
condition1 Logical
condition2 Logical
condition3 Logical
counter_safe Số nguyên
' Cài đặt ban đầu
condition1 = True
condition2 = False
condition3 = True
counter_safe = 0
' Cài đặt số lần lặp tối đa
hằng số_max_loop_safe = 1000
Vòng lặp điều kiện bắt đầu ((condition1 và condition2) hoặc condition3)
' Kiểm soát an toàn
counter_safe = counter_safe + 1
Nếu (counter_safe > max_loop_safe)
MessageBox("Giới hạn an toàn: số lần lặp quá nhiều", 0, "Cảnh báo", )
Bỏ qua vòng lặp()
' Xử lý các điều kiện
Nếu (condition1)
xử_lý_condition1()
condition1 = lấy_trạng_thái_mới() ' Cập nhật trạng thái
Nếu (condition2)
xử_lý_condition2()
condition2 = kiểm_tra_trạng_thái_hệ_thống()
' Cập nhật condition3
condition3 = kiêm tra_condtion3()
' Hiển thị trạng thái
label_condition1.text = "Trạng thái condition1: " + str(condition1)
label_condition2.text = "Trạng thái condition2: " + str(condition2)
label_condition3.text = "Trạng thái condition3: " + str(condition3)
xử_lý_event()
_Delay_(100) ' 100 miliseconds
Vòng lặp điều kiện kết thúc ()
2. Các lệnh kiểm soát vòng lặp
Biến Kiểu Tĩnh Mảng Ghi chú
counter Số nguyên
kết_quả_xử_lý Chuỗi
counter = 0
Vòng lặp điều kiện bắt đầu (True) ' Vòng lặp vô hạn
' Kiểm soát an toàn
counter = counter + 1
Nếu (counter > 1000)
MessageBox("Giới hạn an toàn: số lần lặp quá nhiều", 0, "Cảnh báo", )
Bỏ qua vòng lặp()
' Xử lý nghiệp vụ
kết_quả_xử_lý = xử_lý_business_logic()
Nếu (kết_quả_xử_lý == "lỗi")
MessageBox("Xử lý gặp lỗi", 0, "Lỗi", )
Bỏ qua vòng lặp() ' ép buộc thoát vòng lặp
Nếu (kết_quả_xử_lý == "bỏ qua")
Đến vòng lặp kết thúc() ' nhảy qua phần còn lại của vòng lặp
Nếu (kết_quả_xử_lý == "tạm dừng")
MessageBox("Xử lý tạm dừng", 0, "Thông báo", )
Vòng lặp điều kiện bắt đầu (True)
xử_lý_event()
_Delay_(100)
Nếu (nút_t继续.check)
Bỏ qua vòng lặp()
Vòng lặp điều kiện kết thúc ()
Đến vòng lặp kết thúc()
' Xử lý mặc định
Cập nhật giao diện()
Lưu_kết_quả(kết_quả_xử_lý)
.Delay_(50)
Vòng lặp điều kiện kết thúc ()
3. Vòng lặp có trả về
Biến Kiểu Tĩnh Mảng Ghi chú
kết_quả Số nguyên
số_lần_thử Số nguyên
số_lần_thử_max Số nguyên
kết_quả = 0
số_lần_thử = 0
số_lần_thử_max = 5
' Cài đặt thời gian chờ tối đa (giây)
hằng số_time_out = 30
Vòng lặp điều kiện bắt đầu (kết_quả = 0 và số_lần_thử < số_lần_thử_max)
' Ghi nhận thời gian bắt đầu
time_start = lấy_thời_gian_bây_giờ()
' Hiển thị thông báo
label_trạng_thái.text = "Đang thử lần " + str(số_lần_thử + 1) + "..."
thanh_tien_trinh_thử.value = số_lần_thử
' Thực thi thao tác
kết_quả = thực_hiệnlệnh_phức_tạp()
' Cập nhật số lần thử
số_lần_thử = số_lần_thử + 1
' Kiểm tra thời gian xử lý
time_elapsed = tính_thời_gian(lấy_thời_gian_bây_giờ(), time_start)
Nếu (time_elapsed > time_out)
MessageBox("Thời gian xử lý vượt quá giới hạn: " + str(time_elapsed) + " giây", 0, "Cảnh báo", )
kết_quả = -1 ' Đặt mã lỗi
Bỏ qua vòng lặp()
' Kiểm tra kết quả
Nếu (kết_quả < 0)
MessageBox("Thao tác thất bại, mã lỗi: " + str(kết_quả), 0, "Lỗi", )
Bỏ qua vòng lặp() ' thoát ra khi có lỗi
xử_lý_event()
_Delay_(200) ' 200 miliseconds
Vòng lặp điều kiện kết thúc ()
Nếu (kết_quả > 0)
MessageBox("Thao tác thành công! Kết quả cuối cùng: " + str(kết_quả), 0, "Thành công", )
thanh_tien_trinh_thử.value = thanh_tien_trinh_thử.max
Lưu ý quan trọng
Tránh vòng lặp vô hạn
- Cơ chế thay đổi điều kiện:
- Đảm bảo biến trong điều kiện được thay đổi trong body vòng lặp
- Ví dụ: ``` Biến i = 0 Vòng lặp điều kiện bắt đầu (i < 10) ' Code xử lý i = i + 1 ' Đảm bảo điều kiện sẽ thành_False_ xử_lý_event() Vòng lặp điều kiện kết thúc ()
2. **Giới hạn an toàn**:
- Nên thêm counter cho các vòng lặp có thể lâu
- Ví dụ: ```
Biến counter = 0
hằng số_max_loop = 10000
Vòng lặp điều kiện bắt đầu (điều_kiện nào đó và counter < max_loop)
' Code xử lý
counter = counter + 1
Nếu (counter % 100 == 0)
xử_lý_event() '定期保持界面响应
Vòng lặp điều kiện kết thúc ()
Nếu (counter >= max_loop)
MessageBox("Đã đạt giới hạn an toàn", 0, "Cảnh báo", )
- Giới hạn thời gian:
- Thêm giới hạn về thời gian cho các vòng lặp có thể lâu
- Ví dụ: ``` Biến gio_bat_dau = lấy_thời_gian_bây_giờ() hằng số_max_run_time = 60 ' 60 giây
Vòng lặp điều kiện bắt đầu (điều_kiện nào đó) ' Kiểm tra timeout time_elapsed = tính_thời_gian(lấy_thời_gian_bây_giờ(), gio_bat_dau) Nếu (time_elapsed > max_run_time) MessageBox("Thời gian xử lý vượt quá giới hạn", 0, "Lỗi", ) Bỏ qua vòng lặp()
' Code xử lý
xử_lý_event()
Vòng lặp điều kiện kết thúc ()
4. **Người dùng hủy**:
- Cung cấp cách hủy vòng lặp bởi người dùng
- Ví dụ: ```
Vòng lặp điều kiện bắt đầu (điều_kiện nào đó)
' Kiểm tra nút hủy
Nếu (nút_hủy.check)
MessageBox("Người dùng đã hủy thao tác", 0, "Thông báo", )
Bỏ qua vòng lặp()
' Code xử lý
xử_lý_event()
Vòng lặp điều kiện kết thúc ()
- Giải phóng tài nguyên:
- Đảm bảo giải phóng tài nguyên khi thoát vòng lặp
- Ví dụ: ``` Biến file_handle = Mở_file("data.txt")
Vòng lặp điều kiện bắt đầu (file_handle ≠ 0) ' Xử lý nội dung file Nếu (xử_lý_file(file_handle) == False) Đóng_file(file_handle) Bỏ qua vòng lặp()
xử_lý_event()
Vòng lặp điều kiện kết thúc ()
' Đảm bảo đóng file Nếu (file_handle ≠ 0) Đóng_file(file_handle)