《代码大全2》第16章 控制循环
前言
“循环”是一个非正式的术语,用来指代任意一种迭代控制结构 (iterativecontrol structure)——任一能够导致应用程序反复执行一段代码的结构。常见的循环种类有 C++和 Java 中的 for、while 和 do-while, 以及 Microsoft Visual Basic 中的For-Next、 While-Wend 和 Do-Loop-While。使用循环是编程中最复杂的方面之一;知道如何以及何时使用每一种循环是创建高质量软件的一个决定性因素。
16.1 选择循环的种类
在大多数语言中,你只能用到少数几种循环。
1、计数循环(counted loop)。执行的次数是一定的,可能是针对每位雇员执行一次。
2、连续求值的循环(continuously evaluated loop)。 预先并不知道将要执行多少次,它会在每次迭代时检查是否应该结束。例如,它会在还有剩余资金的时候继续运行,直到用户选择了退出,或者遇到了一个错误。
3、无限循环 (endless loop)。一旦启动就会一直执行下去。你会在心脏起搏器、微波炉以及导航控制仪等嵌入式系统里找到它。
4、迭代器循环(iterator loop)。对容器类里面的每个元素执行一次操作。
这些类型的循环首先是在灵活度上有差异——要么循环执行的次数是一定的,要么就在每次迭代的时候检查循环有没有完成。
这些循环还在检查循环是否执行完毕的位置上有所不同。你可以把检查放在循环的开始、中间或者结尾处。这一特征能够告诉你该循环会不会至少执行一次。
- 如果是在循环头进行检查,那么它的循环体就不一定会执行到。
- 如果把检查放在循环尾,它的循环体就会至少执行一次。
- 如果是在循环的中间检查,那么位于检查前面的那一部分循环就会至少执行一次,但是位于检查后面的那部分循环就不一定会执行到了。
灵活度和检查位置决定了如何对用作控制结构的循环种类进行选择。表16-1显示了多种语言中的循环种类,并且描述了其灵活度和检查位置。
16.1.1 什么时候使用 while 循环
编程新手有时认为 while 循环会不断地求 while 条件的值,并且会在条件变成假的时候执行结束,而不论循环里面正在执行的是哪一条语句。尽管没有这些新手所想象的那么灵活,while 循环的确是一种灵活的循环选择。如果你预先并不知道循环要迭代多少次,那么就使用 while 循环。与一些编程新手所想的正相反,执行每通过这种循环一次,while 只做一次循环终止的检测,而且有关 while 循环的最主要事项就是决定在循环开始处还是结尾处做检测。
1.检测位于循环的开始
对于在开始处进行检测的循环,在 C++、C#、 Java、 Visual Basic 以及大多数其他的语言里,你可以使用 while 循环。在其他语言里,你也可以模拟 while 循环。
2.检测位于循环的结尾
你也许偶尔会遇到这种情况:需要一个灵活的循环,但是该循环至少需要执行一次。在这种情况下,你可以用一个在结尾处做条件检测的 while 循环。在C++、C#以及 Java 里,你可以用 do-while,在 Visual Basic 里用 Do-Loop-While,或者在其他语言里模拟在末尾进行条件检测的循环。