標籤:

[基礎] AHK 中標籤和函數的用法

AHK 中有兩種比較像的東西,標籤和函數。

標籤

標籤比較簡單,用來標記一段代碼的位置,以 return 結束。

Gosub, TestGoto, Test; 不再執行MsgBox, EndTest: MsgBox, Testreturn

Test 就是一個標籤。標籤可以用 Gosub 調用,Gosub 執行完後會繼續執行下一行。也可以用 Goto 調用,但 Goto 調用完就不會回來了。

除了使用 Gosub 或者 Goto 調用,標籤還可以作為其他命令的參數,比如 Hotkey、SetTimer 等等。

標籤里的代碼默認是執行的。比如這樣一個 AHK 文件。

MsgBox, BeginTest: MsgBox, Testreturn

即使沒有主動調用 Test 標籤,Test 標籤里的內容還是會被執行。

可以使用動態的標籤名來調用標籤。

labelName := "Test"; IsLabel 函數用來判斷標籤是否存在if (IsLabel(labelName)){ Gosub, %labelName%}

函數

函數也可以實現標籤的功能,但更強大和靈活。

Test1()Test2("test")Test1(){ MsgBox, Test1}; 函數支持參數和返回值Test2(text){ MsgBox, % text return true}

函數的調用方式是函數名加小括弧,如果需要傳遞參數,在括弧里添加參數。和標籤不一樣,函數里的代碼默認是不執行的。

可以使用動態的標籤名來調用函數。

functionName := "Test"; IsFunc 函數用來判斷函數是否存在if (IsFunc(functionName)){ %functionName%()}

函數里可以調用標籤,標籤里也可以調用函數。標籤和函數可以重名。

函數里的標籤

在函數里可以再定義標籤。

Test(){ Gosub, Test2 return Test2: MsgBox, Test2 return}

代碼中 Test2 是一個內部標籤,只能在 Test 函數中訪問。但不同函數中的內部標籤也不能夠重名,即所有的標籤名必須是唯一的。

標籤和函數的區別

總結下標籤和函數的區別:

  1. 定義和調用的方式不同。
  2. 函數支持參數和返回值,標籤不支持。
  3. 標籤默認是執行的,函數默認不執行。
  4. 調用標籤的開銷比調用函數小,調用空函數的耗時比調用空標籤多百分之幾十。
  5. 函數中可以使用局部變數和靜態變數,但標籤中只能使用全局變數。
  6. 某些場景可能只允許用標籤,但最新的 AHK 版本基本所有場景都可以用函數了(如果以後想起來有不可取代的場景再補充)。

那麼是使用標籤還是函數呢?

通常情況,使用函數就可以了。如果考慮到性能,在無需參數和返回值的情況可以用標籤取代函數。除非一個函數被高頻率地調用,否則優化的效果不大。

付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領域相關問題,靈活定價,歡迎諮詢,微信 ly50247。

推薦閱讀:

AutoHotKey 常用函數或小技巧有哪些分享?
如何藉助Autohotkey使total commander在單雙窗口間切換?
用AutoHotkey(AHK) 使用滑鼠手勢在win10下快速切換虛擬桌面?

TAG:AutoHotkey |