網頁標題: 05 分支 (1): If...ElseIf...Else...EndIf

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
 



 不可能每個程式都跟前面的例子一樣從頭做到尾,而是要隨著使用者輸入而有不同的適當反應。這種根據狀況而只執行某些程式碼的寫法稱為「分支」。下列範例中的 If 和 Else 表示分支裡的兩種情形,若密碼輸入正確將只執行 If 到 Else 之間的程式碼,否則只執行 Else 到 EndIf 之間的程式碼。

 If 後面必須寫出執行第一個分支所需要滿足的條件,條件結束後接 Then. 條件裡連寫兩個等於表示兩個字串 ($upass 跟 $passwd) 要完全相等,。把分支裡的程式碼向右縮排也是好習慣,有助於辨別整體程式碼的架構。

 像 == 這類用在判斷條件的運算符號稱為關係運算符號,下面是 AutoIt 裡的關係運算符號:

06. 運算符號列表 (2).txt
符號說明
=相等(文字不分大小寫)
==全等(文字大小寫相等)
<>不等(文字不分大小寫)
>大於(依字典順序)
>=大於或等於(依字典順序)
<小於(依字典順序)
<=小於或等於(依字典順序)

 (註:一個等於在此為大小寫不分的相等比較,請勿跟變數給值得等於混淆。)

 上列關係運算符號就是數學上學的比較,但請注意 == 二個連寫等於只能用在比較字串區分大小寫的相等,其他比較的計算結果與數學上一樣。進行比較前,應該先確認參與的變數擁有預期的資料型態,若型態不符則必須「手動轉型」,手動轉型將在範例 5-5 中說明。

 字串比較就是按照「字典順序」。「字典順序」意謂把字串按照字典中排列單詞那樣的排序,比如五個字串 "a", "b", "ab", "ac", "abc" 假設給定字典上字母順序為 a, b, c 則它們的字典順序是 "a", "ab", "abc", "ac", "b". 根據字典的字母排序,可以確定 "a" 必然在 "b" 之前。接著,"a" 出現於所有 a 開頭的字之前,所以其他三者夾在 "a", "b" 之間。再根據字母順序確定 "ab" 必在 "ac" 之前,"abc" 因為是 ab 開頭所以被夾中間。如此一來,就決定它們的字典順序,在給定字母順序的前提下從頭開始比較,字母一樣就往後比較直到不一樣為止。

 然而,字母該如何被比較?字母間的次序並不是天生而是人為,包含表中提及的是否區分大小寫,其實就只是兩種不同的字母排序而已。有興趣的讀者可參見 Collation.

 每個「比較」是判斷條件裡最基本的單元,但要是一個條件牽涉兩個以上的比較,如 $x 和 $y 都要大於 0, 就必須使用布林值的運算符號。一個「比較」倍計算完後會得到「真」或「假」,也就是之前提及的布林型態,之後可以用 Not, And, Or 等邏輯運算組成想要的條件,剛才所提就寫為 $x > 0 And $y > 0

 下面將判斷登入成功的程式擴展成同時檢查帳號與密碼:

 If 的判斷條件含有兩部份,分別是「帳號全等」、「密碼全等」,因為必須一起打對才算成功,所以中間用「且」連接。

 事情不會都這麼簡單分成 If 跟 Else 而以,很可能 Else 裡面其實又要細分其他狀況,這時使用 ElseIf, 舉例如下:

 AutoIt 執行到判斷時,會先檢驗 If 的條件,成立就執行 If 下的程式然後跳到 EndIf 以後,否則檢驗第一個 ElseIf 條件,成立就執行下面程式,否則又檢驗第二個 ElseIf, 如此下去,要是所有條件都不滿足才執行 Else.

 判斷也可以只寫 If 沒有 Else, 下面展示單行的 If:

 If...Then MsgBox 一氣呵成不換行,就只有帳密都打對才提示燈入成功,要不然就直接結束了。這對於只要判斷一個條件成立,其他狀況都不管時相當有用。


 看完 If...ElseIf...Else...EndIf 整個使用方式之後,我們可以用它來改進範例 4-3:

 上例跟範例 4-3 相比,印出結果前多了三行對變數的處理,而且也分成兩個狀況來顯示結果。

 $name 的處理是判斷它是否為空字串,是則將值改為「未具名用者」,當使用者沒輸入姓名直接按 OK, 或者用 Cancel 離開輸入對話,就會讓 $name 收到空字串而執行這個動作。

 $height 跟 $weight 都用 Number 函式手動轉型,結果跟隱含轉型相同,目的在預先知道轉換後的結果,有機會挑出不合理的輸入。根據內建函式 Number 的行為規範,非數字開頭的字串被轉型後結果是 0, 所以只要把 0 從合理範圍中去除即可。有興趣的讀者可參見其他類似的手動轉型,包含 Int, String, 或者 StringIsIntStringIsFloat 提供更進階的輸入格式掌握。


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


本文張貼者:Bo-Cheng Jhan〔張貼時間:民國105年4月26日(星期二)15點44分〕

部落格首頁


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