[toc]
# 前言
## 什么是程序结构?
程序结构一般指结构化程序设计,也就是说我们把程序结构化,进行以模块功能和处理过程设计为主的详细设计的基本原则。
详细请点 [结构化程序设计的百度百科]。
其概念最早由 E.W.Dijikstra在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。
所以我们今天就来讲一讲顺序、选择、循环三种基本控制结构构造。
# 基本控制结构构造
结构流程图(待补)
## 顺序结构
内容: 按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
表示方式:(语句一)——›(语句二)——›(语句n)
比如:
msgbox,你好
msgbox,你真好
msgbox,你太好了
run Notepad ;激活运行记事本这个动作
send 你烦不烦?{enter} ;{enter}代表回车
return
运行试一下,你会发现它是从上而下依次运行语句。
## 选择结构
内容:选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。
表示方式:(条件),如果(语句一)满足(条件),则运行(语句一),如果(语句二)满足(条件),则运行(语句二)。
比如:
a=1
b=2
if a>b
{msgbox,a大于b}
else
{msgbox,a小于b}
return
由此可见,选择结构大都依赖与if...else这个命令。
AHK中还有一种看起来很复杂的选择结构。
首先先依次解析下命令
+ InputBox: 显示输入框让用户输入字符串,也就是说这条命令会获取用户的输入。类似于C语言中的scanf。
表示方法:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default] ;后悔写这个了,因为要解释的东西好多啊。
+ OutputVar:用来保存用户输入文本的变量名.
比如:
> + inputbox, name ;变量名 即 OutputVar 为 name //运行后弹出一个以脚本名为标题的输入框,输入数据保存在变量name中。
+ ErrorLevel:当用户按下取消按钮时 ErrorLevel 值被设置为 1,按下确定时值为 0;
故来看下面这条命令。
比如
InputBox, password, Enter Password, (your input will be hidden), hide ;hide为隐藏你所输入的数据
InputBox, UserInput, Phone Number, Please enter a phone number., , 640, 480
if ErrorLevel
MsgBox, CANCEL was pressed.
else
MsgBox, You entered "%UserInput%" ; "%UserInput%" 相当与 C 语言中的 %d 。
第一个‘,’为(1),以此类推。hide为隐藏你所输入的数据
(1)获取用户输入的数据,保存在(2)变量 password 中。
(3) Enter Password 为标题。
(4) (your input will be hidden) 为显示框中的内容 。
(5)获取用户输入的数据,保存在(6)变量 UserInput 中。
(7) Phone Number 为标题。
(8) Please enter a phone number.为显示框中的内容。
(9)(10)依次为 Width, Height, X, Y的值
关于 % 的使用,详细参见[ AHK中% 符号的用法 ]
## 循环结构
内容: 循环结构可以看成是一个条件判断语句和一个向回转向语句的组合。另外,循环结构的三个要素:循环变量、循环体和循环终止条件. ,循环结构在程序框图中是利用判断框来表示,判断框内写上条件,两个出口分别对应着条件成立和条件不成立时所执行的不同指令,其中一个要指向循环体,然后再从循环体回到判断框的入口处.
表达方式:见图。
循环结构有三种: for 循环; loop 循环; while 循环。
### for 循环
内容:for....in
表达形式: For Key [, Value] in Expression
解释一下:
Key : 在每次重复开始时用来保存键的变量名称. ** 变量 **
[, Value] : 保存与当前键关联的值的变量名. ** 值 **,中括号表示非必需。
Expression :结果为对象的 表达式 或包含对象的变量. ** 表达式或变量 **
比如:
colours := Object("red", 0xFF0000, "blue", 0x0000FF, "green", 0x00FF00) ; 列出对象中的键值对:
for k, v in colours ; 上面的表达式可以直接代替下面的“colours”:
s .= k "=" v "`n"
MsgBox % s
k相当与‘red’,‘blue’,‘green’这些键,而v则取代逗号后面的‘0xFF0000’等键值。
所以在上段代码中,for 循环的作用是历遍colours里面的键和键值,并赋值给s
上段代码语法其实和 C 语言类似。
但首先我们还是要看AHK中独特的赋值。即等号的应用。
也就是要先要了解变量和表达式,这里省略[shenglue](笑)不写,详细请参见参考手册的变量与表达式,或者单独开章讲解。
单独讲赋值。(因为自己一看其实也不懂)(笑)
### 等号运算符(=)
内容:给变量赋值,获取变量的内容。
#### 给变量赋值
传统方法:使用 等号运算符 (=) 来指定 没有加引号的 原义字符串或包围在百分号中的变量. 例如:
MyNumber = 123
MyString = This is a literal string.
CopyOfVar = %Var% ; 和 = 运算符一起使用时, 需要使用百分号来获取变量的内容.
表达式方法:使用 冒号等号运算符 (:=) 来保存数字, 加引号的字符串和其他类型的表达式. 例如:
MyNumber := 123
MyString := "This is a literal string."
CopyOfVar := Var ; 和前面段落中与其作用相同的语句不同, 百分号不和 := 运算符一起使用.
那么如何清空变量?
MyVar = ;传统方法。
MyVar := "" ;表达式方法。
注意的是:上面的这对空引号只能和 := 运算符一起使用, 因为和 = 运算符一起使用时, 则会在变量中保存两个原义的引号字符.
也可以看看这个:AHK 中 = 和 := 赋值运算符的用法
还是没有搞懂.=和“=”是什么意思,赋值?
### loop 循环
表达形式: Loop [, Count]
Count:执行循环体 (重复) 的次数. 如果省略, Loop 会无期限继续, 直到遇到 break 或 return.
比如:
Loop
{
if a_index > 25
break ; 终止循环
if a_index < 20
continue ; 跳过后面并开始下一次重复
MsgBox, a_index = %a_index% ; 这里将仅显示数字 20 到 25
}
调试看看它循环了多少次。
### while 循环
内容:重复执行一系列命令,一直到指定的表达式计算结果为假。
表达方式: While Expression
Expression : 任何有效的 表达式. 例如:while x < y。
比如:
x=1
y=2
while y>x
msgbox,y大于x
(笑)
之后要怎么改才能跳出循环呢?试试看。
# 总结
主要讲了三种基本的控制程序结构构造。分别为 顺序结构,选择结构和循环结构
选择结构的主要关键字是 if ... else
重点讲了循环结构,循环结构有 for 循环,loop 循环 ,while 循环。
for 循环 关键字为 for in ;
还适当的讲解了一下等号运算符的应用,留下了几个问题。比如 .= 和 “ = ” 。
适当的扩展了一下如何获取用户输入(inputbox和ErrorLevel)。
归纳:
- 关键字: if ...else ,
for ... in ... ,
loop ... , while ... ,
ErrorLevel ,
inputbox ,
OutputVar ,
:= 。
如果有哪个关键字还不懂,可以去参考手册来详细了解。
# 参考链接
相关词条:
相关网站: