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 這一篇文章封面 |
本站公告:〔您越需要我們,我們就越有創意〕 | 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕 |
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 | 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」 |