尽管我从不相信速成,但也知道有些事情必须速战速决。事实上,我一直在忽略一些(其实非常重要的)细节,带着读者向前向前向前……这并不是想要囫囵吞枣,而是为了尽快有个“概览”,而后再重新来过。反刍,也是学习的诀窍之一。
    计算机的另外一个长项是“不厌其烦”,无论你让它做什么,只要?你要求的是它确实能做的(比如它不大可能每天定时煎两个荷包蛋给你);
    ?你说得足够清楚(程序正确无误);
    那么它就会百分百照做,并且绝不怕重复——你让它做多少遍它就做多少遍。
    我们小时候都计算过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=1To256
    $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:
    1.这个例子中所需要的计算太简单,所以,“算法”上的优化没有太大作用。而在大型的
    软件工程中,算法优化非常重要,效果也异常惊人。不过,大多数普通用户的“任务”,往往用“笨方法”更划算……