網頁標題: 06 分支 (2): Switch...EndSwitch 與 Select...EndSelect

Warning: fopen(/home/crazy/www/cmsb/bcj/has_read.php): failed to open stream: Permission denied in /home/crazy/www/compose/reading.php on line 2077

Warning: fputs() expects parameter 1 to be resource, bool given in /home/crazy/www/compose/reading.php on line 2079

Warning: fclose() expects parameter 1 to be resource, bool given in /home/crazy/www/compose/reading.php on line 2080
 
﹗﹗﹗觀看留言:此文章已經有2則留言 ﹗﹗﹗


 If...Else...EndIf 是分支程式的一般化寫法,可以表達任何的分支條件安排,但是當條件都是 $x == 1, $x == 2, ... 這種形式,用 If...ElseIf... 會讓程式碼變長,而且執行時萬一遇到很後面才滿足的狀況,會多出判斷前面那些不滿足的條件所花的時間。針對這種簡單的條件,可以用 Switch...Case...EndSwitch 來代替 If...ElseIf...EndIf.

 下列範例展示如何更精準的得知使用者在 InputBox 的行為。AutoIt 內建一個值稱為 @error, 當 InputBox 執行完畢後這個值會反映剛才執行時遭遇的狀況,如使用者根本沒輸入舊按 Cancel. 因為它不允許直接以 @error = 0 這樣的方式修改,所以不是變數,而是「巨集」。往後 @error 這個巨集也將一直用來偵測許多執行例外,使用者自定義函式部份會在詳細介紹 @error.

 範例中 InputBox 比以往多出五個參數,依序分別是寬度、高度、左距、頂距、時間限制。寬度跟高度決定 InputBox 顯示大小,左距跟頂距控制顯示的位置,時間限制就是視窗顯示接受使用者輸入的時間,以秒計算。大小、位置等四個參數因為在此不用特別設定,但是為了設置列在其後的「時間限制」參數,必須全部寫出來,這邊允許使用 Default 這個字應付,其意思是「默認」,也就是讓 AutoIt 自己決定,跟之前沒寫出來時意思一樣。

 Switch...EndSwitch 之間可以有許多 Case, 每個 Case 可以是一個數字或字串,或者一對數字、字串夾範圍(註:字串可比大小,就可以夾範圍),也可以是 Else 表示其他狀況都沒符合。所有 Case 之間無順序性(除 Case Else 外),因為預設當 Case 內的程式執行完後即離開 Switch, 如果沒符合任何 Case 又沒 Else, 直接跳過整個 Switch. ContinueCase 寫在 Case 中可直接跳到接下去一個 Case 的程式裡執行,上例如果不理會輸入,10 秒後就顯示「超過時間,被取消」,就是兩個 Case 裡字串連起來的。

 "Q" To "QZ" 依字典順序即 "Q", "QA", "QB", ..., "QZ" 以及包含這些字串開頭的所有字串,其中當然包含 "QP", 但是 "QP" 已被列出在上一個 Case, 所以打 QP 會顯示「數學」而非「科學」。當 Case 符合的值有重疊時,將執行第一個符合的 Case, 因此要是把 "QP" 這個 Case 抓到 "Q" To "QZ" 之後,輸入 "QP" 就會先進入 "Q" To "QZ" 而顯示「科學」。

 Case Else 必須是最後一個 Case, 否則將只有 Switch 到 Case Else 間的 Case 會被選擇,因此上例把 Case Else 拿到第一個 Case, 馬上就會發生可怕的錯誤了!


 另一個分支寫法的選擇是 Select...EndSelect. 它和 Switch 一樣都列 Case, 但每個 Case 是一個完整的判斷條件,跟 If...Then 間的條件一樣,且 Select 也是照寫的順序判斷下來,看哪個條件先滿足。跟 Switch 一樣,把 Case Else 拿到第一個 Case 的話,也會發生可怕的錯誤。下例展示 Select...EndSelect:

 它跟 Switch 差別在於 Select 後面不用接一個變數,但 Switch 要指定被判斷的變數。它跟 If...ElseIf...Else 差別在於,它可以 ContinueCase, If...ElseIf...Else 程式碼被切開就無法連續執行,在有些狀況下 ContinueCase 可以讓我們不用重複寫一樣的程式碼,正如範例 6-1 所展現的,不用寫兩次「被取消」訊息,又能讓二個 Case 都有印出它。


 一般而言,如果變數裡的值種類少,比如只會有 1, 2, 3 而以,鼓勵使用 Switch 或 Select, 但是若今天面對 InputBox 這般使用者可隨意輸入的情形,建議使用 If...ElseIf...Else. 另外 If...Then 也被用再只有一個條件的判斷,只有 If 沒有 Else, 用 If 寫起來比 Select 簡單許多。


回 · 我的 AutoIt 學習筆記 這一篇文章封面
回 · 我的 AutoIt 學習筆記 這一篇文章封面


本文張貼者:Bo-Cheng Jhan〔張貼時間:民國105年4月9日(星期六)17點11分 | 更新次數 #2 | 最後更新:民國105年4月30日(星期六)3點53分〕

部落格首頁


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