Bài học này sẽ giúp bạn có cái nhìn khái quát về một số thành phần cốt lõi mà sau này chúng ta sẽ làm việc với nó hằng ngày trong AutoIT
I. BIẾN
1) Khái niệm
Biến (variable) nói nôm na là thành phần cốt lõi khi lập trình, là nơi lưu trữ một số các thông tin cần thiết khi chúng ta code, biến có thể thay đổi giá trị trong quá trình code.Ví dụ trong một chương trình tính toán a + b, người dùng nhập số a và số b vào thì chúng ta lưu trữ số a và số b đó vào biến để thực hiện phép cộng và xuất ra kết quả.
2) Sử dụng biến
Biến trong AutoIT bắt đầu bằng ký tự đồng đô-la (Ký tự $)Và một số lưu ý khi sử dụng biến như sau:
$<tên biến>
; Có thể sử dụng số, các chữ cái, ký tự "_"
; Tên biến không được viết tiếng việt có dấu
; Tên biến không được có khoảng cách
; Tên biến phải bắt đầu bằng ký tự chữ cái
Ví dụ
; Một số tên biến đúng:
$eckop
$eck_op
$eck_op_95
; Một số tên biến sai
$ eckop ; sai do có khoảng cách
$eck*op ; sai do có ký tự * không hợp lệ
$95eckop ; sai do ký tự đầu trong tên là số
$_eckop95 ; sai do ký tự đầu không phải là chữ cái
3) Khai báo biến
Một điều đáng mừng cho các bạn mới, đó là AutoIT KHÔNG YÊU CẦU KHAI BÁO BIẾN khi sử dụng. Điều này vừa có cái lợi (là muốn dùng thì chỉ cần ghi ra, khỏi khai báo), vừa có cái hại (đôi khi dùng lại trùng lặp biến gây ảnh hưởng tới chương trình, hoặc kiểu biến không theo ý coder).
Phần này tôi sẽ nhắc lại sau do liên quan tới phạm vi của biến.
4) Cách đặt tên biến khoa học trong AutoIT
Nên đặt các biến có tên gợi nhớ, dễ xác định mục đích
$diemtoan = 9
$diemvan = 7.3
Nên đặt tên biến gọn gàn, tránh rườm rà, rắc rối
$d_toan = 9
$d_van= 7.3
II. TOÁN TỬ
1) Toán tử gán (=)
Chúng ta phải gán giá trị để sử dụng biến, dù là biến rỗng (biến không có giá trị gì). Cách gán giá trị như sau:
$<tên biến> = giá trị
Trong đó giá trị có thể là số nguyên, số thực, chuỗi, kiểu bool
Nếu là kiểu số, các bạn có thể gán bình thường:
$a = 5
$b = 9.55
Nếu là kiểu chuỗi, bạn cần để trong dấu nháy đơn hoặc nháy kép.
$str = "Hi I'm EckOp"
$str2 = 'Hi I"m EckOp'
Nào, hãy để ý $str và $str2, $str sử dụng nháy kép và tôi được phép dùng nháy đơn trong chuỗi, ngược lại với $str2, vì vậy tùy vào việc chuỗi bạn chứa nháy nào (hoặc có hoăc không) mà bạn đặt chuỗi đó vào nháy ngược lại.
Cuối cùng nếu kiểu dữ liệu là kiểu bool (kiểu logic), thì bạn gán giá trị cho true hoặc false
$a = True
$b = False
Chúng ta cũng có thể gán giá trị giữa các biến cho nhau
$a = 1
$b = 2
$c = $a ; lúc này c sẽ có giá trị là 1
$c = $a ; lúc này c sẽ có giá trị là 1
$b = $c ; lúc này b sẽ có giá trị là 1
2) Các phép toán +, -, *, /
Sử dụng bình thường như các biểu thức toán học, có thể cộng biến và biến hoặc biến và số
$a = 5
$b = 9.55
$c = $a + $b ; kết quả c = 14.55
$c = $c - 0.55 ; kết quả c = 14
$c = $c / 2 ; kết quả c = 7
$b = $c * $a ; kết quả b = 35
$c = $a + $b ; kết quả c = 14.55
$c = $c - 0.55 ; kết quả c = 14
$c = $c / 2 ; kết quả c = 7
$b = $c * $a ; kết quả b = 35
3) Các phép toán phức hợp
Bao gồm các phép toán +=, -=, *=, /=Ý nghĩa của các phép toán loại này là thay vì chúng ta viết
$a = 1
$a = $a + 1 ; kết quả a = 2
Thì để chúng ta có thể viết đơn giản hơn
$a = 1
$a += 1 ; kết quả a = 2
$a += 1 ; kết quả a = 2
Chúng ta có thể hiểu rằng $biến += giá trị <=> $biến = $biến + giá trị
Điều này cũng tương tự với các phép -=, *=, /=
$a = 1
$a += 4 ; kết quả a = 5
$a -= 1+1 ; kết quả a = 3
$a *= 2 ; kết quả a = 6
$a /= 2+1 ; kết quả a = 2
4) Các toán tử quan hệ
Bao gồm: =, == (so sánh), <> (so sánh khác), <, >, >=, <= (so sánh lớn bé)Các toán tử này sẽ trả về giá trị logic là true hoặc false cho phép gán trước đó.
Lưu ý rằng, toán tử quan hệ = khác với phép gán = . Ví dụ:
$a = 1 ; đây là phép gán
$a = 1 = 1 ; a: true
$a = 1 = 1 ; a: true
Ta thấy ở dòng 2, $a = là một phép gán, sau phép gán là toán tử 1=1 và lúc này 1=1 đúng nên a sẽ trả về giá trị là true cho phép gán $a =.
Như vậy có thể hiểu nôm na rằng, phép gán là dấu bằng đầu tiên sau tên biến, còn lại những gì đằng sau dấu bằng đó đều là các toán tử.
Ví dụ một số toán tử quan hệ:
$a = 1 = 1 ; $a: true
$a = "A" = "a" ; $a: true
$a = "A" == "a" ; $a: false
$a = "A" <> "B" ; A khác B nên $a: true
$a = 1 > 1 ; $a: false
$a = 1 >= 1 ; $a: true
$a = 1 < 1 ; $a: false
$a = 1 <= 1 ; $a: true
$a = "A" = "a" ; $a: true
$a = "A" == "a" ; $a: false
$a = "A" <> "B" ; A khác B nên $a: true
$a = 1 > 1 ; $a: false
$a = 1 >= 1 ; $a: true
$a = 1 < 1 ; $a: false
$a = 1 <= 1 ; $a: true
Vậy hãy lưu ý dòng 2 và dòng 3, giữa "=" và "==" đều là so sánh, nhưng khác nhau ở chỗ nào?
Đối với "=" thì sự so sánh đó chỉ so sánh tương đồng giữa hai đối tượng, không phân biệt chữ hoa hay chữ thường, còn "==" thì ngược lại.
Vì vậy do "A" là chữ hoa khác "a" là chữ thường nên dòng 2 trả về giá trị False.
5) Các hàm toán học cơ bản
Một số hàm toán học mà bạn có thể dùng sau này trong AutoIT
; Hàm Mod(a,b)
$a = Mod(10,3) ; lấy phần dư a/b, ở đây 10/3=3 dư 1 nên $a: 1
; Hàm Int(a,b)
$a = Int(10,3) ; lấy phần nguyên a/b, ở đây 10/3=3 nên $a: 3
; Hàm Random(a,b,1)
$a = Random(1,10,1) ; lấy số ngẫu nhiên trong đoạn [a, b], a sẽ nhận giá trị nằm trong đoạn [1,10], còn số 1 cuối cùng là xuất giá trị nguyên.
; Hàm Round(a,n)
$a = Round(9.326,2) ; làm tròn số a đến sau dấu chấm thứ n, ở đây làm tròn đến sau dấu chấm thứ 2 nên a: 9.33
; Hàm Sqrt(n)
$a = Sqrt(9) ; căn bậc 2 của số n, ở đây căn bậc hai của 9 là 3 nên a: 3
$a = Mod(10,3) ; lấy phần dư a/b, ở đây 10/3=3 dư 1 nên $a: 1
; Hàm Int(a,b)
$a = Int(10,3) ; lấy phần nguyên a/b, ở đây 10/3=3 nên $a: 3
; Hàm Random(a,b,1)
$a = Random(1,10,1) ; lấy số ngẫu nhiên trong đoạn [a, b], a sẽ nhận giá trị nằm trong đoạn [1,10], còn số 1 cuối cùng là xuất giá trị nguyên.
; Hàm Round(a,n)
$a = Round(9.326,2) ; làm tròn số a đến sau dấu chấm thứ n, ở đây làm tròn đến sau dấu chấm thứ 2 nên a: 9.33
; Hàm Sqrt(n)
$a = Sqrt(9) ; căn bậc 2 của số n, ở đây căn bậc hai của 9 là 3 nên a: 3
6) Phép nối chuỗi
Phép nối chuỗi là sử dụng dấu & để nối các chuỗi lại với nhau.Ví tụ tôi có
$a = "Hi"
$b = "My name is EckOp"
$b = "My name is EckOp"
Tôi muốn nối hai chuỗi lại với nhau để tạo thành một câu hoàn chỉnh, tôi dùng:
$c = $a & $b ; giá trị c : HiMy name is EckOp
Lúc này, $c sẽ là: "HiMy name is EckOp". Vì vậy tôi muốn đặt hay chuỗi đó bởi một dấu khoảng cách và dấu phẩy cho đúng cú pháp câu, tôi lại nối chuỗi theo cách sau:
$c = $a & ", " & $b ; giá trị c : Hi, My name is EckOp
III. FUNC TRONG AUTOIT
1) Khái niệm
Func hay gọi là hàm là một dạng chương trình con mà ta xây dựng trong AutoIT. Mục đích của việc xây dựng Func là để tạo giải pháp cho một đoạn code lập đi lặp lại hoặc để tạo một hàm cho mục đích sử dụng của chương trình.2) Khai báo và sử dụng
Trong AutoIT, func được khai báo như sau
Func <tên func>([tham biến])
...
EndFunc
...
EndFunc
Trong đó:
- Tên hàm là do chúng ta đặt, tránh đặt trùng tên với các hàm khác hoặc các lệnh có sẵn của AutoIT,
- Tham biến có hoặc không để xử lý trong chương trình (tham biến có thể hiểu giống như các hàm khác như Msgbox, phải nhập tham biến vào để chạy Msgbox thì func của bạn cũng vậy)
Func trong AutoIT sẽ không chạy trừ khi chúng ta gọi, để gọi một func, chỉ cần gọi tên func đó ra.
Tôi ví dụ 2 Func sau để các ban hiểu rõ hơn về Func nhé:
_HelloWorld() ; Gọi func ra dùng
; Func 1
Func _HelloWorld()
Msgbox(64,'Hi','Hello World')
EndFunc
; Func 1
Func _HelloWorld()
Msgbox(64,'Hi','Hello World')
EndFunc
_HelloWorld('Hello World 1') ; Gọi func ra dùng 1
_HelloWorld('Hello World 2',32) ; Gọi func ra dùng 2
; Func 2
Func _HelloWorld($text, $flag = 64)
Msgbox($flag,'Hi',$text)
EndFunc
_HelloWorld('Hello World 2',32) ; Gọi func ra dùng 2
; Func 2
Func _HelloWorld($text, $flag = 64)
Msgbox($flag,'Hi',$text)
EndFunc
Chúng ta thấy:
Ở func 1: tôi khai báo func mà không cần tham biến , và tôi gọi func cũng chỉ cần gọi tên func đó ra, đây là dạng func đơn giản nhất trong AutoIT. Khi chạy thử bạn sẽ thấy bảng thông báo hello world.
Ở func 2: tôi khai báo func với hai tham biến là $text và $flag, trong đó:
- $text là tham biến bắt buộc phải nhập
- $flag = 64 là tham biến tùy chỉnh, có giá trị mặc định là 64, có thể nhập hoặc không. Như vậy để tạo một tham biến tùy chỉnh, tôi chỉ cần làm một phép gán trong tham biến đó.
Func của tôi khi chạy hàm MsgBox, sẽ lấy $text và $flag dựa vào thông tin mà tôi khai báo khi gọi func. Các bạn chạy thử chương trình sẽ thấy func 2 xuất hiện 2 bảng thông báo khác nhau dựa vào việc tôi khai báo $flag trong func. Vì:
- Ở trường hợp 1: $text tôi nhập vào func là Hello World 1 và $flag tôi bỏ trống, func sẽ tự hiểu mặc định $flag là 64. Sau đó chuyển vào hàm Msgbox của tôi bằng các thông số trên.
- Ở trường hợp 2: $text tôi nhập vào func là Hello World 2 và $flag tôi nhập là 32. Sau đó chuyển vào hàm Msgbox của tôi bằng các thông số trên.
Tôi mở rộng vấn đề một chút về các tham biến và giá trị mặc định tùy chỉnh của chúng.
Như tôi đã trình bày, để tham biến nào là tham biến tùy chỉnh (có thể nhập hoặc không), tôi chỉ cần sử dụng phép gán cho tham biến đó, nhưng không phải muốn tạo tham biến tùy chỉnh ở vị trí nào cũng được, mà cần phải có nguyên tắc. Hãy xem ví dụ sau:
; Func 1
Func _HelloWorld1($text, $flag = 64)
Msgbox($flag,'Hi',$text)
EndFunc
; Func 2
Func _HelloWorld2($flag = 64, $text)
Msgbox($flag,'Hi',$text)
EndFunc
Func _HelloWorld1($text, $flag = 64)
Msgbox($flag,'Hi',$text)
EndFunc
; Func 2
Func _HelloWorld2($flag = 64, $text)
Msgbox($flag,'Hi',$text)
EndFunc
Trong 2 func, tôi chỉ đơn giản đổi chỗ $flag = 64 và $text, nhưng func 1 lại chạy được, còn func 2 sẽ bị báo lỗi Badly formatted "Func" statement.
Điều này có nghĩa là trong format của một func, các tham biến tùy chỉnh luôn phải đứng sau các tham biến bắt buộc, vì vậy tôi phải đặt $flag = 64 đặt ở đằng sau $text.
3) Giải thích thêm về tham số
Các tham số mà chúng ta đưa vào một func, sẽ là tham số nội bộ, nói nôm na thì tên biến của nó sẽ chỉ có giá trị bên trong func, không có giá trị và ảnh hưởng tới bên ngoài. Bạn xem ví dụ sau đây để hiểu rõ.
$text = "Xin chào, đây là biến ngoài func"
_HelloWorld("Xin chào, đây là biến trong func")
Msgbox(64,'Ngoài func',$text)
Func _HelloWorld($text)
Msgbox(64,'Trong func',$text)
EndFunc
_HelloWorld("Xin chào, đây là biến trong func")
Msgbox(64,'Ngoài func',$text)
Func _HelloWorld($text)
Msgbox(64,'Trong func',$text)
EndFunc
Các bạn chạy thử và thấy rõ ràng, dù trong func Hello World tôi khai báo biến $text trùng với biến $text ngoài func, nhưng điều này vẫn không ảnh hưởng gì giá trị của nhau. Do trong func, AutoIT hiểu biến $text như là biến cục bộ, chỉ có giá trị trong nội bộ hàm Func đó, còn biến $text bên ngoài là biến toàn cục, không liên quan tới biến $text bên trong func.
4) Cách đặt tên Func khoa học
- Nên đặt tên Func gợi nhớ và gọn gàng
- Nên viết in hoa mỗi chữ đầu trong tên Func
- Nên thêm dấu _ trước tên Func để tránh trùng với một số hàm và lệnh trong AutoIT
; Ví dụ một số tên Func
_XinChao()
_TinhGiaiThua()
_SapXep()
_SoLonNhat()
_SoBeNhat()
_XinChao()
_TinhGiaiThua()
_SapXep()
_SoLonNhat()
_SoBeNhat()
IV. THỰC HÀNH
Bây giờ là lúc để "học đi đôi với hành", tránh các lý thuyết nhàm chán ^^Ở bài 1, tôi đã giới thiệu các bạn về bài toán Hello World. Bây giờ chúng ta thêm một số chi tiết vào bài toán này để thực hành ở bài 2.
Yêu cầu bài toán: xây dựng một hàm xuất ra màng hình bảng thông báo mà ở đó chúng ta chỉ cần nhập nội dung vào.
Đầu tiên, tôi xác định chúng ta xây dựng một hàm mang tên _BangThongBao
Func _BangThongBao()
Msgbox(0,'title', 'text', 'timeout')
EndFunc
Msgbox(0,'title', 'text', 'timeout')
EndFunc
Tiếp theo, bảng thông báo của tôi phải là loại bảng thông báo nào, có tiêu đề, nội dung và timeout, vì vậy tôi tạo ra 5 tham biến tương tự: $flag, $title, $text, $timeout. Do tính chất bài toán yêu cầu "mà ở đó chúng ta chỉ cần nhập nội dung vào", nghĩa là $text là tham biến bắt buộc, còn lại là các tham số tùy chỉnh, nên tôi sẽ để $text ở vị trí đầu trong danh sách tham biến.
Func _BangThongBao($text, $title = 'Tiêu đề',$flag = 0, $timeout = 0)
Msgbox(0,'title', 'text', 'timeout')
EndFunc
Msgbox(0,'title', 'text', 'timeout')
EndFunc
Tiếp theo, hàm Msgbox bên trong func của tôi sẽ lần lượt nhận các giá trị trên để chạy, nên tôi sẽ gán các tham biến vào các vị trí trên hàm MsgBox
Func _BangThongBao($text, $title = 'Tiêu đề',$flag = 0, $timeout = 0)
Msgbox($flag, $title, $text, $timeout)
EndFunc
Msgbox($flag, $title, $text, $timeout)
EndFunc
Và cuối cùng, tôi gọi hàm để kiểm tra kết quả
_BangThongBao("Xin chào, đây là bảng thông báo của tôi")
_BangThongBao("Xin chào, đây là bảng báo lỗi của tôi","Báo lỗi",16)
Msgbox($flag, $title, $text, $timeout)
EndFunc
_BangThongBao("Xin chào, đây là bảng báo lỗi của tôi","Báo lỗi",16)
_BangThongBao("Xin chào, đây là bảng báo lỗi của tôi tự tắt trong 10 giây","Báo lỗi",16,10)
Func _BangThongBao($text, $title = 'Tiêu đề',$flag = 0, $timeout = 0)Msgbox($flag, $title, $text, $timeout)
EndFunc
Thật dễ phải không nào ^^
Chúng ta sẽ kết thúc bài hai ở đây, các bạn hãy xem lại và thực hành nhiều hơn để hiểu rõ về biến, toán tử và func ^^.
3 nhận xét
nhận xétĐã hoàn thành bài 2, hy vọng sẽ viết được 1 chương trình thu thập thông tin mà mình đang cần. :D
ReplyMà trong ví dụ về biến trong và ngoài hàm.
ReplyMình nghĩ bạn nên cho ví dụ về xuất số ra ngoài màn hình sẽ dễ hiểu hơn là chỉ hiến thị chữ.
[Học Autoit] Bài 2: Biến, Toán Tử Và Func Trong Autoit - Opdo'S Blog >>>>> Download Now
Reply>>>>> Download Full
[Học Autoit] Bài 2: Biến, Toán Tử Và Func Trong Autoit - Opdo'S Blog >>>>> Download LINK
>>>>> Download Now
[Học Autoit] Bài 2: Biến, Toán Tử Và Func Trong Autoit - Opdo'S Blog >>>>> Download Full
>>>>> Download LINK