一. 變數與常數 :
- AutoIt 的變數與常數名稱須以 $ 開頭, 只能使用英數字與底線, 不分大小寫 (常數名稱建議都用大寫以利識別), 所以 $var 與 $Var是一樣的. 注意不可以跟內建函式名稱相同. 變數可以先宣告再賦值, 也可以宣告同時賦值, 多個變數可以同時在一行宣告並賦值, 例如 :
Dim $a ;宣告變數 (一定要有修飾詞)
$a=1 ;先宣告再賦值
Dim $a=1 ;宣告同時賦值
Dim $a, $b, $c ;同一行宣告多個變數 (一定要有修飾詞)
Dim $a=1, $b, $c=3 ;同時宣告多個變數並賦值 (一定要有修飾詞)
注意, 下列指令會有執行錯誤 :
$a=1, $b=2, $c=3 ;沒有加修飾詞
$a ;沒有加修飾詞 - 常數要用 Const 關鍵字宣告, 且其值不可更改, 否則執行錯誤. 例如 :
Global Const $PI=3.14159
** 使用 Const 就是為了避免數值不小心被改變 (因重複宣告同名變數)
** 常數不能重複宣告, 否則執行錯誤 (變數是可以重複宣告的) - 變數應該用 Dim/Local/Global 三個關鍵字宣告其有效範圍 (scope) :
Dim : 宣告之變數如果在全域範圍中不存在, 那麼就是 Local; 否則就是 Global
Local : 強制宣告變數之有效範圍為 Local
Global : 強制宣告變數之有效範圍為 Global (即使在函數內宣告)
** 建議明確使用 Local/Global 宣告有效範圍, 不要使用 Dim 讓直譯器判斷
** 若未使用 Dim/Local/Global 修飾詞, 則必須在宣告之同時賦值, 否則會執行錯誤.
** 未宣告修飾詞之變數, 在程式最外層預設為 Global; 在函式或 If/For/While 等結構內為 Local - 執行過程中常要輸出變數值, 以檢驗演算結果是否正確, 可用下列兩種輸出方式 :
(1). 輸出到 STDOUT : ConsoleWrite("$Str=" & $Str & @CRLF)
(2). 輸出到訊息框 : MsgBox(0, "標題", $Str)
讀取輸入到變數中可用 :
從 InputBox 讀取輸入 : $ID=InputBox("標題", "提示語") - AutoIt與Javascript一樣屬於弱型態語言, 變數之資料型別於賦值時決定, 且可以隨時更換型別, 例如 :
Local $x= “abc” ;宣告 $x 為字串, 存入 “abc”
$x=123 ; $x 因賦值為123而變成數值
二. 註解 :
- 單行註解 :
AutoIt使用分號當作單行註解符號, 所有跟在分號後面的字串都會被直譯器或編譯器忽略. 但是字串中的分號為例外, 就只是個分號而已. 例如 :
;此行是註解
$string=";這不是註解, 是字串" - 段落註解 :
若註解超過一行, 則可以用 #cs 與 #ce包圍起來, 例如 :
#cs
這是段落註解
#ce
- AutoIt 的敘述以跳行為結束.
- AutoIt 敘述若太長時, 可用 “空白+底線” (“ _”) 表示跨到下一行繼續. 例如 :
$Str=“蘋果 iPad2 _
iPod and Itune”
** 注意, 底線後面不可再加任何註解, 否則會執行錯誤.
AutoIt 有五種資料類型, 但因為是弱型態語言, 所以宣告變數時不用宣告型態 :
- 數值 :
(1). 10進位數值 : 整數例如 123, -123, 實數例如 1.23, -1.23, 1.23e5 (科學表示法)
(2). 16進位數值 : 以前綴 0x 為首, 例如 0x1cf, 0x236b (最大只能表示 32 位元之整數)
(3). 檢查變數是否為數值可呼叫函式 IsNumber(), IsInt(), IsFloat() - 字串 :
(1). 字串內容必須用單引號或雙引號括起來, 例如 : ‘Hello’ 或 “Hello”
(2). 字串內容含有引號時, 必須使用混合使用單引號與雙引號, 例如 : “I am ‘smart’”
(3). 字串與數值做數學計算時, 會呼叫 Number() 函數將文字轉成數值, 若其內含有非數值
字元, 則將傳回0進行計算. 例如 10 * “abc3” -> 0 而 10* “3” -> 30
(4). 檢查變數是否為字串可呼叫函式 IsString()
(5). 字串的串接使用 & 符號 - 布林值 :
(1). 布林值只有兩個 : true 或 false, 例如 : Dim $b1=true, $b2=false
(2). 布林值通常使用於三個邏輯運算子 : And, Or, 以及 Not, 例如 :
Dim $b3=$b1 And $b2
(3). 布林值與數值, 文字混合運算時會以下列規則轉換 :
a. 布林值與數值做數學計算時 : true -> 1, false -> 0
b. 布林值與數值做邏輯運算時 : 1 -> true, 其他數值 -> false
c. 布林值與文字串接時 : true -> “True”, false -> “False” (注意首字母大寫)
(4). 檢查變數是否為布林值可呼叫函式 IsBool() - 二進位值 :
(1). 二進位值可以呼叫 Binary() 函式取得, 顯示其值時會以16進位數值表示
例如 : $bin=Binary(“abc”) -> 0x616263
(2). 檢查變數是否為二進位值可呼叫函式 IsBinary() - 指標 (pointer) :
(1). 指標是一個記憶體位址, 例如呼叫 WinGetHandle() 函式時就會傳回指定視窗之控制碼
(2). 指標值大小依 AutoIt32 或 AutoIt64 分為 32/64 位元
五. 常數與變數 ($ 號) :
- AutoIt的常數與變數都以 $ 開頭, 不區分大小寫, 所以 $VAR 與 $var 是一樣的
- 常數或變數名稱只能使用字母, 數字, 以及底線 (可以用數字開頭, 常數名稱建議用大寫)
- 常數要用 Const 關鍵字宣告, 且其值不可更改, 否則執行錯誤. 例如
Global Const $PI=3.14159
** 使用 Const 就是為了避免數值不小心被改變 (因重複宣告同名變數)
** 常數不能重複宣告, 否則執行錯誤 (變數是可以重複宣告的) - 變數應該用 Dim/Local/Global 三個關鍵字宣告其有效範圍 (scope) :
Dim : 宣告之變數如果在全域範圍中不存在, 那麼就是 Local; 否則就是 Global
Local : 強制宣告變數之有效範圍為 Local
Global : 強制宣告變數之有效範圍為 Global (即使在函數內宣告)
** 建議明確使用 Local/Global 宣告有效範圍, 不要使用 Dim 讓直譯器判斷
** 如果沒有使用 Dim/Local/Global 修飾詞, 則必須在宣告之同時賦值, 否則執行錯誤.
** 未宣告修飾詞之變數, 在程式最外層預設為 Global; 在函式或 If/For/While 等結構內為Local - 變數可以先宣告再賦值, 也可以宣告同時賦值, 多個變數可以同時在一行宣告並賦值 :
Dim $a ;宣告變數 (一定要有修飾詞)
$a=1 ;先宣告再賦值
Dim $a=1 ;宣告同時賦值
Dim $a, $b, $c ;同一行宣告多個變數 (一定要有修飾詞)
Dim $a=1, $b, $c=3 ;同時宣告多個變數並賦值 (一定要有修飾詞)
注意, 下列指令會有執行錯誤 :
$a=1, $b=2, $c=3 (沒有加修飾詞)
$a (沒有加修飾詞) - AutoIt與Javascript一樣屬於弱型態語言, 變數之資料型別於賦值時決定, 且可以隨時更換.
Local $x= “abc” ;宣告 $x 為字串, 存入 “abc”
$x=123 ; $x 因賦值為123而變成數值
六. 運算子 :
AutoIt 共有 22 個運算子, 分為 5 類 :
- 算術運算子 :
算術運算子共有 + - * / ^ 共五個, 特殊之處是 AutoIt 納入了乘方 (冪次) 運算子 ^, 例如 :
MsgBox(0,"乘冪",2^10) ; => 輸出 1024
算術運算子共有 + - * / ^ 共五個, 特殊之處是 AutoIt 納入了乘方 (冪次) 運算子 ^, 例如 : MsgBox(0,"乘冪",2^10) ; => 輸出 1024
除以 0 會得到 1.#INF (無窮大), 例如 :
MsgBox(0,"除以零",2/0) ; => 輸出 1.#INF
運算結果若為大於 1 之無窮小數, 則會取小數點後若干位數使得整數位數 + 小數位數=15 位數, 例如 :
12/7 => 1.71428571428571; 120/7 => 17.1428571428571
運算結果若為小於 1 之無窮小數, 則會取小數點後 15 位數, 例如 :
2/7 => 0.285714285714286
對於其他較複雜之數學運算, AutoIt 使用數學函式來處理. - 文字串接運算子 :
AutoIt 使用 & 運算符來串接字串, 例如 :
"This book is " & "mine" -> "This book is mine"
當字串與數字串接時, 數字會被轉換成文字再串接, 例如 :
"$" & 120 -> "$120" - 指派運算子 :
指派運算子有6個, 除了 = 之外, 再加上與四則運算以及文字串接運算子結合者 :
=, +=, -=, *=, /=, &=
結合指派運算子的左邊運算元必須為變數, 右方運算元可以為常數或變數. 將左右兩運算元運算後之結果再指派給左方運算元變數, 例如 :
Local $x += $y ;將 $x 與 $y 相加之和再指派給 $x - 比較運算子 :
比較運算子共有 7 個 : > < >= <= == = <> (不等於), 其運算結果為布林值 true/false
比較特殊的是, AutoIt 有兩個相等比較運算子 : = (不分大小寫) == (區分大小寫), 只在英文字串比較時有差別. 例如 :
$str= “ABC”
If $str= “abc” Then -> 結果為 true
If $str== “aBC” Then -> 結果為 false - 邏輯運算子 :
邏輯運算子只有 3 個 : AND, OR, NOT 用於布林運算元.
如果要用到 XOR 運算, 必須使用 ((NOT $A) AND $B) OR ($A AND (NOT $B)) 等效式
- NOT (邏輯否定)
- ^ (冪次)
- * / (乘除)
- + - (加減)
- & (字串串接)
- < > <= >= = <> == (比較)
- AND OR (邏輯且/或, 且先於或)
七. 程式除錯 :
程式開發階段常需要讀取輸入或輸出變數來偵錯 :
- 變數輸出 :
執行過程中常要輸出變數值, 以檢驗演算結果是否正確 :
輸出到 SciTE 底下的 Console :
ConsoleWrite("$Str=" & $Str & @CRLF) ;寫入STDOUT (不會跳行)
輸出到 MsgBox :
MsgBox(0, "標題", $Str) ;寫入圖形介面
輸出陣列變數可匯入使用者定義函式庫 Array.au3 後呼叫 _ArrayDisplay() :
#include <Array.au3>
Local $a[3]=[1,2,3]
_ArrayDisplay($a, "陣列內容") - 讀取輸入 :
從 STDIN 讀取輸入 : ConsoleRead 必須放在迴圈中, 且必須編譯成 .exe
Local $data
While True
$data &= ConsoleRead()
If @error Then ExitLoop
WEnd
從 InputBox 讀取輸入 :
$ID=InputBox("標題", "提示語")
沒有留言:
張貼留言