[Học AutoIT] Bài 2: Biến, toán tử và func trong AutoIT


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
$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


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

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 = ; đây là phép gán
$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

Vậy hãy lưu ý dòng 2 và dòng 3, giữa "=" "==" đề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

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"

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

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


_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

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$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.


Như vậy, các bạn đã có thể nắm sơ nét về các xây dựng một func ở mức cơ bản rồi. Còn việc xây dựng ở mục đích nào, và làm gì, chúng ta rồi cũng sẽ học tới ^^

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

Trong 2 func, tôi chỉ đơn giản đổi chỗ $flag = 64 $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

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()

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

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

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

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)
_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 ^^.

Xin chào, mình là opdo - một đứa mê những dòng code vô tận. Rất cám ơn vì bạn đã ghé thăm blog của mình ^^. Hi vọng được bạn ủng hộ để blog mình phát triển hơn

Share this

Related Posts

Previous
Next Post »

3 nhận xét

nhận xét
lúc 22:12 18 tháng 9, 2016 delete

Đã 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

Reply
avatar
lúc 08:41 31 tháng 10, 2016 delete

Mà trong ví dụ về biến trong và ngoài hàm.
Mì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ữ.

Reply
avatar
Nặc danh
lúc 18:18 27 tháng 3, 2022 delete

[Học Autoit] Bài 2: Biến, Toán Tử Và Func Trong Autoit - Opdo'S Blog >>>>> Download Now

>>>>> 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

Reply
avatar