AutoIT tut 19 : Vòng lặp vô tận – EXITLOOP -CONTINUELOOP

0
(0)

VÒNG LẶP VÔ TẬN

Trong lập trình, sẽ có không ít tình huống bạn cần xử lý một bài toán, mà giải thuật bạn cần dùng là một vòng lặp không biết trước số lần lặp. Vì vậy, cách giải quyết là dùng một vòng lặp vô tận. Thông thường trên windows, cách sử dụng phổ biến nhất của vòng lặp vô tận là dùng để xử lý giao diện người dùng GUI và các tương tác trên GUI, phần này được đề cập rõ trong phần tạo giao diện bằng AutoIt (Tham chiếu GUI) của ebook này.

Để tạo một vòng lặp vô tận cho For, While hay Do thì nguyên tắc chung là làm cho <điều kiện> của vòng lặp đó luôn luôn thỏa. Cụ thể là :

 For $i = 0 To 0 Step 0<lệnh>…..Next  While 1<lệnh>…..WEnd  Do<lệnh>….Until 0 

Chú ý

Ø       Khi bạn muốn sử dụng một vòng lặp vô tận thì nên dùng While… WEnd hoặc Do.. Until vì chúng ngắn gọn hơn For.

Ø       Vòng lặp While chỉ thực hiện lặp khi <điều kiện> trả về True (một giá trị khác 0), cho nên ở đây ta sử dụng một giá trị đại diện là 1

Ø       Vòng lặp Do thực hiện lặp khi <điều kiện> trả về là False (giá trị 0 – zero), cho nên phần <điều kiện> ta sẽ thay bằng số 0 để nó không bao giờ là True.

Ø       Trong quá trình cho chạy vòng lặp vô tận và xử lý các lệnh một cách liên tục như vậy sẽ làm cho hiệu suất của CPU bị chiếm dụng rất cao, khoảng vài chục % (xem ở thẻ Performance trong Task Manager). Vì vậy, khi sử dụng vòng lặp vô tận bạn phải cẩn thận, và ở vài trường hợp ta cần tạo ra khoảng dừng giữa hai lần lặp liên tiếp để tránh quá tải cho CPU. Muốn tạo khoảng dừng, ta sử dụng câu lệnh Sleep <mili giây> , trong đó 1000 mili giây = 1 giây. Tuy nhiên sẽ làm cho quá trình lặp bị chậm lại, thời gian xử lý sẽ dài hơn.

Đọc đến đây có lẽ bạn sẽ thắc mắc một điều, làm sao dừng lại vòng lặp vô tận ? Câu trả lời nằm ngay sau đây.

EXITLOOP

ExitLoop cho phép bạn kết thúc (ngắt) vòng lặp ngay lập tức mà không cần quan tâm đến điều kiện của vòng lặp. Dạng đầy đủ :

ExitLoop  [which loop]

Giải thích

Tham số [which loop] là tùy chọn, có thể có hoặc không. Nếu không được chỉ định thì mặc định là 1. Chức năng của tham số này cho phép chỉ định vòng lặp nào cần phải ngắt trong trường hợp có nhiều vòng lặp lồng nhau. Nếu có nhiều vòng lặp lồng nhau, thì vòng lặp chứa lệnh ExitLoop là vòng lặp cấp 1 (vòng lặp hiện hành), vòng lặp bao bên ngoài vòng lặp cấp 1 là vòng lặp cấp 2, bao bên ngoài vòng lặp cấp 2 là vòng lặp cấp 3,… Vì vậy nếu [which loop]

=  1 tương ứng với vòng lặp cấp 1 (vòng lặp hiện hành)

=  2 tương ứng với vòng lặp cấp 2

= n tương ứng với vòng lặp cấp n

= 0 hoặc một số âm thì ExitLoop không có tác dụng ngắt.

Chú ý

Sử dụng ExitLoop bên ngoài vòng lặp là không được phép. Cũng tương tự như vậy, nếu bạn chỉ định cho tham số [which loop] một cấp vòng lặp không có (hiểu đơn giản là… giả sử như bạn chỉ có vòng lặp cấp 1, nhưng lại dùng ExitLoop 2 hoặc ExitLoop 3 thì tất nhiên sẽ bị báo lỗi)

Ví dụ

Đoạn mã sau minh họa việc dùng ExitLoop cho vòng lặp hiện hành. Vòng lặp vô tận sẽ cho xuất hiện hộp thoại Running sum =… , yêu cầu bạn nhập vào một số dương để tính tổng, quá trình lặp lại cho đến khi nào bạn nhập một số âm. Kết quả được thông báo ra màn hình .

$sum = 0

While 1 ;use infinite loop since ExitLoop will get called

    $ans = InputBox("Running sum =" & $sum, _

        "   Enter a positive number.  (A negative number exits)")

    If $ans < 0 Then ExitLoop

    $sum = $sum + $ans

WEnd

MsgBox(0,"The sum was", $sum)

Ví dụ bên dưới minh họa việc dùng ExitLoop để ngắt vòng lặp cấp 2 (cụ thể là While).Sau khi chạy sẽ có hai lần xuất hiện thông báo trên màn hình.  Bạn chú ý các giá trị $i và $j được thông báo để hiểu cách làm việc.

$i = 1

While $i<=2  ;đây là vòng lặp cấp 2

      For $j=1 To 5  ;đây là vòng lặp cấp 1

            If $j=3 Then ExitLoop

            MsgBox(0,"msg", "$i = " & $i &"   $j = " & $j)

      Next

      $i += 1

WEnd

                               

CONTINUELOOP

Không như ExitLoop, lệnh ContinueLoop thực hiện ngay lần lặp kế tiếp của vòng lặp, bỏ qua tất cả các lệnh đứng sau nó. Có dạng đầy đủ

ContinueLoop  [which loop]

Giải thích

Tham số [which loop] của ContinueLoop hoàn toàn như ExitLoop.Cũng có thể có hoặc không (mặc định là 1 – tức vòng lặp hiện hành). [which loop] bằng n, thì áp dụng cho vòng lặp cấp n. [which loop] bằng 0 hoặc số âm thì ContinueLoop cũng mất tác dụng.

Đối với vòng lăp For, ContinueLoop gây ra việc tăng giá trị của biến đếm, thực hiện so sánh với giá trị dừng và chạy các lệnh như bình thường.

Đối với vòng lặp While và Do, ContinueLoop cũng bỏ qua các lệnh phía sau nó và quay trở ra xét điều kiện của vòng lặp.

Chú ý

Cũng như ExitLoop, nếu bạn sử dụng ContinueLoop bên ngoài vòng lặp hoặc chỉ định cho tham số [which loop] một vòng lặp không có thì sẽ bị báo lỗi.

Ví dụ

Đoạn mã sau minh họa việc dùng ContinueLoop cho vòng lặp cấp 1. Bảng thông báo giá trị $i=2 sẽ không xuất hiện.

For $i=1 To 4

      If $i=2 Then ContinueLoop

      MsgBox(0, "message", "$i = " & $i)

Next

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Related posts

AutoIT tut 27: 1 số ví dụ về chương trình AutoIT

AutoIT tut 32 : GUISet ( Tổng hợp )

AutoIT tut 28: UICtrlSetBkColor -Thay đổi màu nền hiện tại của control sang một màu khác