CÂU LỆNH ĐIỀU KIỆN IF
Câu lệnh if là một câu lệnh điều kiện phổ biến nhất trong các ngôn ngữ lập trình bậc cao. Nó được dùng để kiểm tra một điều kiện nào đó, nếu dúng thì thực hiện công việc tương ứng, ngược lại thì làm một việc khác. Nếu bạn đã học qua Excel thì chắc chắn phải biết hàm If bên đó. Với AutoIt, câu lệnh điều kiện if được thành lập thành một khối. Để đơn giản, ta chia thành các phần nhỏ để dễ trình bày.
Dạng chung của If :
If <điều kiện> Then
<các câu lệnh>
............
Else
<các câu lệnh>
.........
EndIf
Như trình bày ở trên ta thấy rằng, một khối lệnh If phải được bắt đầu với If… Then và kết thúc với EndIf.
<điều kiện> là một biểu thức so sánh (có sử dụng các toán tử so sánh, logic như : <, >, <> , =,…And, Or, Not) hoặc một biểu thức thường có trả về giá trị. Nếu điều kiện trả về True thì <các câu lệnh> sau Then được thực hiện. Nếu ngược lại thì <các câu lệnh> sau Else được thực hiện, không bao giờ xảy ra hai trường hợp cùng một lúc. Cũng xin nhắc lại, nếu <điều kiện> trả về một giá khác 0 thì có nghĩa True, bằng 0 là False.
<các câu lệnh> có thể là một hay nhiều dòng lệnh, hoặc cũng có thể là lệnh rỗng. Hoặc cũng có thể là một khối điều kiện If khác.
Mệnh đề Else thì tự chọn, có thể có hoặc không. Nếu Else không tồn tại thì khi <điều kiện> là False thì chương trình sẽ thực hiện tiếp các lệnh nằm sau EndIf.
Ví dụ đơn giản sau xét xem số chỉ định là chẵn hay lẻ.
$n = 101
If Mod($n, 2)=0 Then
MsgBox(0, "Ket qua", $n & " là số chẵn")
Else
MsgBox(0, "Ket qua", $n & " là số lẻ")
EndIf
Hàm Mod có chức năng tìm số dư của phép chia giữa $n và 2. Cú pháp chung là Mod( a, b). Trong đó a là số bị chia và b là số chia.
Các If lồng nhau :
If được lồng nhau là một If nằm bên trong một khối If…EndIf khác. Các If lồng nhau được dùng rất phổ biến trong lập trình, thông thường là trong trường hợp thẩm định một <điều kiện> với nhiều giả thiết xảy ra khác nhau. Trong các If lồng nhau thì lệnh Else luôn có mối quan hệ liên kết với khối If (chưa có EndIf ) nằm gần nó nhất.
Ví dụ sau là một bổ sung của ví dụ phía trên, xét xem thêm điều kiện để biết số đó có phải là số có 3 chữ số hay không.
$n = 1010
If Mod($n, 2)=0 Then
If 100<=$n And $n<=999 Then
MsgBox(0, "Ket qua", $n & " là số chẵn có 3 chữ số")
Else
MsgBox(0, "Ket qua", $n & " là số chẵn không phải 3 chữ số")
EndIf
Else
If 100<=$n And $n<=999 Then
MsgBox(0, "Ket qua", $n & " là số lẻ có 3 chữ số")
Else
MsgBox(0, "Ket qua", $n & " là số lẻ không phải 3 chữ số")
EndIf
EndIf
Bước thang If… ElseIf… Else… EndIf
Với hai phần vừa được trình bày ở trên thì có lẻ bạn đã hiểu được phần nào khối lệnh If và có thể sử dụng nó để giải quyết nhiều bài toán có yêu cầu điều kiện. Trong phần các khối If lồng nhau, chỗ lồi lõm là một kỹ thuật đúng. Tuy nhiên, khi có quá nhiều If được lồng vào nhau thì đoạn mã của bạn sẽ bị lõm vào rất sâu. Vì lý do này mà bước thang If..ElseIf… được dùng. ElseIf là một từ khóa của AutoIt, báo hiệu việc thẩm định điều kiện If tiếp theo. Cú pháp :
If <điều kiện 1> Then
<các câu lệnh 1>
………
ElseIf <điều kiện 2> Then
<các câu lệnh 2>
……….
ElseIf <điều kiện n> Then
<các câu lệnh n>
………..
Else
<các câu lệnh>
……..
EndIf
Xin nói luôn với các bạn một điều, cú pháp này mới chính là cú pháp tổng quát nhất của khối lệnh If. Hai phần : “Dạng chung của If” và “Các if lồng nhau” thực chất được tách từ đây mà ra. Cho nên từ đây trở đi, khi sử dụng If bạn chỉ cần quan tâm đến phần này. Đến đây cũng xin giải thích lại để bạn hiểu và ghi nhớ.
Các <điều kiện> được thẩm định từ trên xuống. Nếu <điều kiện 1> là True, thì <các câu lệnh 1> được thi hành. Ngược lại thì kiểm tra <điều kiện 2> , nếu đúng thì thi hành <các câu lệnh 2>. Việc ước lượng được xét dần đến <điều kiện n>. Nếu sau tất cả các lần thẩm định, không một điều kiện nào thỏa mãn và Else có tồn tại, thì các lệnh sau Else được thi hành. Ví dụ sau minh họa rõ việc dùng khối If tổng quát .
Dim $var = '-5'
If $var > 0 Then
MsgBox(4096,"", "Value is positive.")
ElseIf $var < 0 Then
MsgBox(4096,"", "Value is negative.")
Else
If StringIsXDigit ($var) Then
MsgBox(4096,"", "Value might be hexadecimal!")
Else
MsgBox(4096,"", "Value is either a string or is zero.")
EndIf
EndIf
Chú ý
Ø Trong trường hợp câu lệnh If bạn sử dụng, chỉ có một lệnh sau Then và không có phần Else thì có thể viết gọn như sau :
If <điều kiện> Then <câu lệnh>
Ví dụ :
$v='05'
if StringIsDigit($v) Then MsgBox(0,'msg','It is a number')
; các lệnh không thuộc If có thể viết tiếp ở đây
Ø Trong các câu lệnh điều kiện (như If) thì việc dùng dấu ngoặc đơn ( ) là không thể thiếu nếu như bạn muốn thẩm định các điều kiện một cách chính xác, vài bài toán yêu cầu được kiểm tra với nhiều điều kiện lồng vào nhau, một kết quả không mong muốn có thể được đưa ra nếu như bạn không gom nhóm các điều kiện hoặc gom nhóm không đúng. Bạn xem ví dụ sau cho thấy cách thức xét điều kiện của khối If thứ nhất và khối If thứ hai là hoàn toàn khác nhau :
Dim $a=0, $b =2, $c=0
if ($a>0 And $b>0) Or $c=0 Then MsgBox(0,”msg”, ” Thông điệp 1″)
if $a>0 And ($b>0 Or $c=0) Then MsgBox(0,”msg”, ” Thông điệp 2″)