網頁標題: AutoIt!! 自定義函式
 
﹗﹗﹗觀看留言:此文章已經有1則留言 ﹗﹗﹗


Dec 19 Sun 2010 21:47 
[A] AutoIt!! 自定義函式
分享:

   和一般程式語言一樣, AutoIt 也可自定義函式。自定義函式寫法如下

Func 函式名稱(引數)
   函式本體內容
   (return something)
EndFunc

其中 return 則視函式是否有傳回值而定。

1. 引數內容不需改變

假設寫一函式,引數為 $x,傳回 1+2+3+...+$x,則該函式可這麼寫

; function
Func SumFunc($n)
   $sum=0
   For $i=1 To $n
     $sum = $sum+$i
   Next
   return $sum
EndFunc

到時要調用時,可這麼使用

$x = 5
$sum1 = SumFunc($x) ; $sum1 = 1+2+3+4+5
$sum2 = SumFunc(10) ; $sum2 = 1+2+3+...+10

2. 不改變引數內容 - 給引數預設值

在說這個之前,我們再詳細看一次 MsgBox 的原型是長怎樣

MsgBox ( 旗標, "標題", "文字" [, 逾時 [, 主控制碼(hwnd)] )

上面中括號裡頭就是選填部份。所謂的選填部份就是可以寫也可以不寫,如果不寫的話就照著預設值跑。如果我們要設定 1 秒後就把這個 MsgBox 關閉的話,可以這麼做

MsgBox(0, "Title", "Text", 1);

這裡我只多了一個引數 -> 1,代表的是逾時時間,但有時我們只想設第五個引數而不想要設第四個引數,第四個引數那對我們而已可能沒意義,於是我們可以用 Default 帶過第四個引數。

MsgBox(0, "title", "Text", Default, 1000)

這樣就可以跳過第四個引數,直接設第5個引數。接著如果自己寫的函式要有預設值功能的話,就直接在函式的引數裡面加上去。直接看例子比較快

Func MyFunc($a=1, $b=10)
    return $a+$b
EndFunc

$x1 = MyFunc() ; 直接使用二個預設引數 1, 10, 故 $x1 = 1+10 = 11
$x2 = MyFunc(5) ; 第一個引數用 5,第二個引數用預設引數 10,故 $x2 = 5 + 10 = 15
$x3 = MyFunc(Default, 5) ; 第一個引數用預設引數 1,第二個引數用 5,故 $x3 = 1 + 5 = 6

函式裡面加入適當的預設引數,可以減少不少設計時的繁雜。

3. 改變引數內容

假設我們寫了一函式要交換二數值,於是我們寫下了這麼一段Swap1函式

Dim $x=10, $y=5
Swap1($x, $y)
MsgBox(0, "交換後", $x & " " &$y)

; SWAP1
Func Swap1($a, $b)
   $t = $a
   $a = $b
   $b = $t
EndFunc

最後結果會發現, $x 和 $y 的內容並未改變。若要在函式中改變其內容,必須在引數裡使用 ByRef 方式宣告,改寫後之 Swap2 如下

Dim $x=10, $y=5
Swap2($x, $y)
MsgBox(0, "交換後", $x & " " &$y)

; SWAP2
Func Swap2(ByRef $a, ByRef $b)
   $t = $a
   $a = $b
   $b = $t
EndFunc

最後 $x 與 $y 值便會交換。

4. Recursive 遞回函式

遞回函式在其它程式語言裡面很常被用到,如果讀者先前沒有程式語言的經驗,這裡只要想做是 "遞回函式" 是 "函式自己會再呼叫自己", "等到一定條件之後,函式會再次結束"。遞回函式這技巧在程式語言很重要,許多很複雜的問題 (如河內塔問題) 可經由遞回函式解決。在此只介紹簡單的遞回應用(雖這個例子用不到遞回,但有心的話請多加練習這個技巧):現在假設要寫 1+2+...+N 的遞回,遞回的概念將會是這麼運作:

(1) Sum(N) = N + Sum(N-1)
(2) Sum(N) = N + (N-1 + Sum(N-2) )
(3) Sum(N) = N + N-1 + ( N-2 + Sum(N-3) )....
....
(N-1) Sum(N) = N + N-1 + ... + N-2 + .... + 3 + Sum(2)
(N)  Sum(N) = N + N-1 + ... + N-2 + .... + 3 + 2 + Sum(1)

好了,最後的 Sum(1) 時,我們就丟回去給它 1。函式寫法如下:

$Sum = RecursiveSum(10)
MsgBox(0, "總合", "$sum=" & $Sum)

Func RecursiveSum($X)
    If $X=1 Then
        Return 1
    Else
        Return $X + RecursiveSum($X-1)
    EndIf
EndFunc

edisonx 發表在 痞客邦 PIXNET 迴響(0) 引用(0) 人氣(65)

http://edisonx.pixnet.net/blog/post/38334467
回 · 發現好東西 autoit 這一篇文章封面


本文張貼者:校校鴿〔張貼時間:民國100年10月10日(星期一)11點24分〕 | 寫信給校校鴿

部落格首頁


學習的故鄉首頁
本站公告:〔您越需要我們,我們就越有創意〕 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」
〔為了讓我們有乾淨的學習環境,請勿任意在本站散播商業廣告與不合法文件或聯結〕:本站宣示