尽管我从不相信速成,但也知道有些事情必须速战速决。事实上,我一直在忽略一些(其实非常重要的)细节,带着读者向前向前向前……这并不是想要囫囵吞枣,而是为了尽快有个“概览”,而后再重新来过。反刍,也是学习的诀窍之一。
计算机的另外一个长项是“不厌其烦”,无论你让它做什么,只要
- 你要求的是它确实能做的(比如它不大可能每天定时煎两个荷包蛋给你);
- 你说得足够清楚(程序正确无误);
那么它就会百分百照做,并且绝不怕重复——你让它做多少遍它就做多少遍。
我们小时候都计算过1+2+3…+10等于55;并且那时候我们还学过所谓的“优化算法”,
1+10=11 2+9=11 3+8=11 4+7=11 5+6=11
所以,只需要算5×11等于多少就可以了。
有了编程能力之后,你可以无需任何“优化算法”[1] ,迅速得知1+2+3…+n等于多少,无论n是多少……
现在,请分别建立以下三个文件,输入相应的代码,分别执行,查看结果。
Testing6.au3
$r = 0 For $i = 1 To 256 $r = $r + $i Next ConsoleWrite($r)
Testing7.au3
$r = 0 $i = 1 While $i <= 256 $r = $r + $i $i = $i + 1 WEnd ConsoleWrite($r)
Testing8.au3
$r = 0 $i = 1 Do $r = $r + $i $i = $i + 1 Until $i > 256 ConsoleWrite($r)
这三个程序的输出结果都是一样的,它们都在计算从1加到256的结果是多少:32896(=1+2+3…+256)。
先让我们看看Testing6.au3的代码。
- 第1行,变量$r被设置了一个“初始值”,0。
- 第2行至第4行,For…Next,是一个循环结构。在循环的过程中,变量$i的值从1开始依次递增,变为2、3、4…直至256为止。此后才会接着执行第5行代码。
- 第3行代码处于循环结构之中,
- 第一次执行的时候,$r = $r + 1(这次$i的值是1);所以,$r = 0 + 1,即,在这行代码执行过后,变量$r的值变成了1;
- 第二次执行的时候,$r = $r + 2(这次$i的值是2);所以,$r = 1 + 2,即,在这行代码执行过后,变量$r的值变成了3;
- 第二次执行的时候,$r = $r + 3(这次$i的值是3);所以,$r = 3 + 3,即,在这行代码执行过后,变量$r的值变成了6;
- 以此类推……
- 直至$i的值递增为256之时,之前的$r的值再次被加上256之后,循环至此结束
- 执行Next语句之后的代码,即第5行代码——输出结果,32896。
而Testing7.au3和Testing8.au3,只不过是用了另外两个循环结构而已:While…WEnd和Do… Until。这两个循环结构的语法更加接近自然语言,基本上就是“Plain English”,很容易看懂。
请认真思考为什么Testing7.au3中的表达式($i <= 256)用的是“<=”,而Testing8.au3中的表达式($i > 256)用的是“>”?
作业:
- 仔细阅读AutoIt帮助文件中Keyword/Statement Reference中的关于For…Next、While…WEnd、以及Do…Until的内容,把其中的每一个例子都尝试着运行一遍。在运行之前,请用脑演练一遍代码,看看执行结果是否与想象得相同……
- 写一个程序,计算“从1乘到某个特定的数字”的结果。
- 把上面的程序总共写成三个版本,分别用For…Next、While…WEnd、以及Do…Until的循环结构,完成同样的功能。
Footnotes:
- 这个例子中所需要的计算太简单,所以,“算法”上的优化没有太大作用。而在大型的软件工程中,算法优化非常重要,效果也异常惊人。不过,大多数普通用户的“任务”,往往用“笨方法”更划算…… [↩]



{ 11 comments… read them below or add one }
autoit的麻烦的地方其实在于一些奇怪的object和function,这些有关编程语言的部分完全可以让读者自己找本c的书看看就行了嘛
要找也不找C啊,应该找VB。
另外笑来这个例子举得不太好哦,容易给初学者以错误的印象。就算是计算机,用”优化算法”明显要快非常多。应该加上一些”当然,就算计算机不用优化算法也能很快得到结果,如果用上优化算法会更好。”之类的话语。
而且结果应该是32896
谢谢!改过了。关于“算法”,加了注释。
1、的确是要考虑算法问题。感兴趣的可以看看这本:《编程之美:微软技术面试心得》
毕竟良好的编程习惯也很重要 O(∩_∩)O~
2、看到卓越网上有人写了一本autoit的书,不过貌似不如笑来先生写的通俗、循序渐进,呵呵。《非常网管:Windows 脚本应用详解》
卓越网上的那书,看看目录就知道内容太水了。
autoit 主要用在什么方面?我还没发现我有这样的需求。。。
笑来老师,这里是不是用的basic语言呀,学会这个后 ,excel的vba是不是更好入手。另这个auto是不是支持别的语言比如:c java
AutoIt
1. AutoIt与BASIC很像;
2. excel的vba被局限在Office套件里,没什么意思;
3. 支持别的语言是什么意思?(autoit就是用C写的)
我是说能不能编译其它语言,比如:c语言写的代码能不能在这里运行,其实我不想学别的了,就是随便问下。
不能。