[toc]
# 前言
## 什么是程序結(jié)構(gòu)霍殴?
程序結(jié)構(gòu)一般指結(jié)構(gòu)化程序設(shè)計,也就是說我們把程序結(jié)構(gòu)化系吩,進(jìn)行以模塊功能和處理過程設(shè)計為主的詳細(xì)設(shè)計的基本原則来庭。
詳細(xì)請點(diǎn) [結(jié)構(gòu)化程序設(shè)計的百度百科]。
其概念最早由 E.W.Dijikstra在1965年提出的穿挨,是軟件發(fā)展的一個重要的里程碑月弛。它的主要觀點(diǎn)是采用自頂向下肴盏、逐步求精及模塊化的程序設(shè)計方法;使用三種基本控制結(jié)構(gòu)構(gòu)造程序帽衙,任何程序都可由順序菜皂、選擇、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造厉萝。
所以我們今天就來講一講順序恍飘、選擇、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造谴垫。
# 基本控制結(jié)構(gòu)構(gòu)造
結(jié)構(gòu)流程圖(待補(bǔ))
## 順序結(jié)構(gòu)
內(nèi)容: 按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行章母,它的執(zhí)行順序是自上而下,依次執(zhí)行翩剪。
表示方式:(語句一)——?(語句二)——?(語句n)
比如:
msgbox乳怎,你好
msgbox,你真好
msgbox前弯,你太好了
run Notepad 蚪缀;激活運(yùn)行記事本這個動作
send 你煩不煩?{enter} ;{enter}代表回車
return
運(yùn)行試一下博杖,你會發(fā)現(xiàn)它是從上而下依次運(yùn)行語句椿胯。
## 選擇結(jié)構(gòu)
內(nèi)容:選擇結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件剃根,根據(jù)判斷的結(jié)果來控制程序的流程。
表示方式:(條件)前方,如果(語句一)滿足(條件)狈醉,則運(yùn)行(語句一),如果(語句二)滿足(條件)惠险,則運(yùn)行(語句二)苗傅。
比如:
a=1
b=2
if a>b
{msgbox,a大于b}
else
{msgbox,a小于b}
return
由此可見,選擇結(jié)構(gòu)大都依賴與if...else這個命令班巩。
AHK中還有一種看起來很復(fù)雜的選擇結(jié)構(gòu)渣慕。
首先先依次解析下命令
+ InputBox: 顯示輸入框讓用戶輸入字符串,也就是說這條命令會獲取用戶的輸入。類似于C語言中的scanf抱慌。
表示方法:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default] 逊桦;后悔寫這個了,因?yàn)橐忉尩臇|西好多啊抑进。
+ OutputVar:用來保存用戶輸入文本的變量名.
比如:
> + inputbox, name 强经;變量名 即 OutputVar 為 name //運(yùn)行后彈出一個以腳本名為標(biāo)題的輸入框,輸入數(shù)據(jù)保存在變量name中寺渗。
+ ErrorLevel:當(dāng)用戶按下取消按鈕時 ErrorLevel 值被設(shè)置為 1匿情,按下確定時值為 0兰迫;
故來看下面這條命令。
比如
InputBox, password, Enter Password, (your input will be hidden), hide 炬称;hide為隱藏你所輸入的數(shù)據(jù)
InputBox, UserInput, Phone Number, Please enter a phone number., , 640, 480
if ErrorLevel
MsgBox, CANCEL was pressed.
else
MsgBox, You entered "%UserInput%" 汁果; "%UserInput%" 相當(dāng)與 C 語言中的 %d 。
第一個‘玲躯,’為(1)据德,以此類推。hide為隱藏你所輸入的數(shù)據(jù)
(1)獲取用戶輸入的數(shù)據(jù)府蔗,保存在(2)變量 password 中晋控。
(3) Enter Password 為標(biāo)題。
(4) (your input will be hidden) 為顯示框中的內(nèi)容 姓赤。
(5)獲取用戶輸入的數(shù)據(jù)赡译,保存在(6)變量 UserInput 中。
(7) Phone Number 為標(biāo)題不铆。
(8) Please enter a phone number.為顯示框中的內(nèi)容蝌焚。
(9)(10)依次為 Width, Height, X, Y的值
關(guān)于 % 的使用,詳細(xì)參見[ AHK中% 符號的用法 ]
## 循環(huán)結(jié)構(gòu)
內(nèi)容: 循環(huán)結(jié)構(gòu)可以看成是一個條件判斷語句和一個向回轉(zhuǎn)向語句的組合誓斥。另外只洒,循環(huán)結(jié)構(gòu)的三個要素:循環(huán)變量、循環(huán)體和循環(huán)終止條件. 劳坑,循環(huán)結(jié)構(gòu)在程序框圖中是利用判斷框來表示毕谴,判斷框內(nèi)寫上條件,兩個出口分別對應(yīng)著條件成立和條件不成立時所執(zhí)行的不同指令距芬,其中一個要指向循環(huán)體涝开,然后再從循環(huán)體回到判斷框的入口處.
表達(dá)方式:見圖。
循環(huán)結(jié)構(gòu)有三種: for 循環(huán)框仔; loop 循環(huán)舀武; while 循環(huán)。
### for 循環(huán)
內(nèi)容:for....in
表達(dá)形式: For Key [, Value] in Expression
解釋一下:
Key : 在每次重復(fù)開始時用來保存鍵的變量名稱. ** 變量 **
[, Value] : 保存與當(dāng)前鍵關(guān)聯(lián)的值的變量名. ** 值 **离斩,中括號表示非必需银舱。
Expression :結(jié)果為對象的 表達(dá)式 或包含對象的變量. ** 表達(dá)式或變量 **
比如:
colours := Object("red", 0xFF0000, "blue", 0x0000FF, "green", 0x00FF00) ; 列出對象中的鍵值對:
for k, v in colours ; 上面的表達(dá)式可以直接代替下面的“colours”:
s .= k "=" v "`n"
MsgBox % s
k相當(dāng)與‘red’,‘blue’跛梗,‘green’這些鍵寻馏,而v則取代逗號后面的‘0xFF0000’等鍵值。
所以在上段代碼中茄袖,for 循環(huán)的作用是歷遍colours里面的鍵和鍵值操软,并賦值給s
上段代碼語法其實(shí)和 C 語言類似。
但首先我們還是要看AHK中獨(dú)特的賦值宪祥。即等號的應(yīng)用聂薪。
也就是要先要了解變量和表達(dá)式家乘,這里省略[shenglue](笑)不寫,詳細(xì)請參見參考手冊的變量與表達(dá)式藏澳,或者單獨(dú)開章講解仁锯。
單獨(dú)講賦值。(因?yàn)樽约阂豢雌鋵?shí)也不懂)(笑)
### 等號運(yùn)算符(=)
內(nèi)容:給變量賦值翔悠,獲取變量的內(nèi)容业崖。
#### 給變量賦值
傳統(tǒng)方法:使用 等號運(yùn)算符 (=) 來指定 沒有加引號的 原義字符串或包圍在百分號中的變量. 例如:
MyNumber = 123
MyString = This is a literal string.
CopyOfVar = %Var% ; 和 = 運(yùn)算符一起使用時, 需要使用百分號來獲取變量的內(nèi)容.
表達(dá)式方法:使用 冒號等號運(yùn)算符 (:=) 來保存數(shù)字, 加引號的字符串和其他類型的表達(dá)式. 例如:
MyNumber := 123
MyString := "This is a literal string."
CopyOfVar := Var ; 和前面段落中與其作用相同的語句不同, 百分號不和 := 運(yùn)算符一起使用.
那么如何清空變量?
MyVar = 蓄愁;傳統(tǒng)方法双炕。
MyVar := "" ;表達(dá)式方法撮抓。
注意的是:上面的這對空引號只能和 := 運(yùn)算符一起使用, 因?yàn)楹?= 運(yùn)算符一起使用時, 則會在變量中保存兩個原義的引號字符.
也可以看看這個:AHK 中 = 和 := 賦值運(yùn)算符的用法
還是沒有搞懂.=和“=”是什么意思妇斤,賦值?
### loop 循環(huán)
表達(dá)形式: Loop [, Count]
Count:執(zhí)行循環(huán)體 (重復(fù)) 的次數(shù). 如果省略, Loop 會無期限繼續(xù), 直到遇到 break 或 return.
比如:
Loop
{
if a_index > 25
break ; 終止循環(huán)
if a_index < 20
continue ; 跳過后面并開始下一次重復(fù)
MsgBox, a_index = %a_index% ; 這里將僅顯示數(shù)字 20 到 25
}
調(diào)試看看它循環(huán)了多少次丹拯。
### while 循環(huán)
內(nèi)容:重復(fù)執(zhí)行一系列命令站超,一直到指定的表達(dá)式計算結(jié)果為假。
表達(dá)方式: While Expression
Expression : 任何有效的 表達(dá)式. 例如:while x < y乖酬。
比如:
x=1
y=2
while y>x
msgbox,y大于x
(笑)
之后要怎么改才能跳出循環(huán)呢死相?試試看。
# 總結(jié)
主要講了三種基本的控制程序結(jié)構(gòu)構(gòu)造咬像。分別為 順序結(jié)構(gòu)算撮,選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)
選擇結(jié)構(gòu)的主要關(guān)鍵字是 if ... else
重點(diǎn)講了循環(huán)結(jié)構(gòu),循環(huán)結(jié)構(gòu)有 for 循環(huán)县昂,loop 循環(huán) 钮惠,while 循環(huán)。
for 循環(huán) 關(guān)鍵字為 for in 七芭;
還適當(dāng)?shù)闹v解了一下等號運(yùn)算符的應(yīng)用,留下了幾個問題蔑赘。比如 .= 和 “ = ” 狸驳。
適當(dāng)?shù)臄U(kuò)展了一下如何獲取用戶輸入(inputbox和ErrorLevel)。
歸納:
- 關(guān)鍵字: if ...else 缩赛,
for ... in ... 耙箍,
loop ... , while ... 酥馍,
ErrorLevel 辩昆,
inputbox ,
OutputVar 旨袒,
:= 汁针。
如果有哪個關(guān)鍵字還不懂术辐,可以去參考手冊來詳細(xì)了解。
# 參考鏈接
相關(guān)詞條:
相關(guān)網(wǎng)站: