读书笔记_代码大全_第16章_控制循环
控制循环
愿我的读书笔记能带你翻过20页的书 http://www.cnblogs.com/jerry19880126/
首先复习一下循环的种类,主要分成for循环与while循环。其中for循环在已知执行次数时使用,比如for(int i = 0; i < 10; ++i)就是指针循环10次;while循环多用于执行次数未知的场合,往往要添加一定的条件,比如while(条件){…},当条件满足时会执行循环体内的代码,执行完一次后,再去判断条件是否满足,依此规律执行下去。while还有do…while的变式,即do{…}while(条件),这种情况下循环体是至少执行一次的。
但在实际编程中,更常用带退出的循环,即while和break组合使用,比如
1 while(true)
2 {
3 …
4 if(满足某个退出条件) { break;}
5 …
6 }
Soloway展开的一项研究指出,这种带退出的循环结构要比其他循环结构更接近于人类思考方式,学员们在一份理解力测试中的得分提高了25%。
本章给出了书写循环的一些好的方法:
(1) 首先是进入循环,应该只从一个位置进入循环,不要像下面这样用goto语句:
1 goto Start;
2 while(表达式)
3 {
4 …
5 Start:
6 …
7 }
(2) 用“{”和“}”把循环中的语句括起来,哪怕循环体只有一句话:
1 while(表达式)
2 {
3 cout << “Hello” << endl;
4 }
这个方法同样适用于if语句,尽管一条语句加不加大括号都是可以的,但加上后会使可读性提高,而且万一以后要对代码进行扩充,就会显得比较方便。
(3) 一个循环只做一件事
循环应跟子程序一样,只做一件事并把它做好,一心两用的结果就是质量差的代码。
(4) 退出循环时,不要为了终止循环而胡乱改动for循环下标,如:
1 for(int i = 0; i < 100; ++i)
2 {
3 …
4 if(条件)
5 {
6 i = 100;
7 }
8 …
9 }
这样为了终止循环而在循环体内给下标赋值的事情是非常可怕的,为什么不用一句简单的break呢?
(5) 避免出现依赖于循环下标最终取值的代码
这种不好的写法其实我自己也常常这样做,比如:
1 int i = 0;
2 for(i = 0; i < 100; ++i)
3 {
4 if(entry[i] == valueToFind)
5 {
6 break;
7 }
8 }
9 if(i < 100) {cout << “find the value” << endl;}
10 else {…}
这样做的代价是把i的作用域由块提升到了函数内,这就不符合作用域越小越好的准则了。我们可以这样来改进代码:
1 bool found = false;
2 for(int i = 0; i < 100; ++i)
3 {
4 if(entry[i] == valueToFind)
5 {
6 found = true;
7 break;
8 }
9 }
10 if(found) {cout << “find the value” << endl;}
11 else {…}
通过添加bool类型的found变量,有效地使i局限到块内,而且提升了程序的可读性。
(6) 循环次数计数器不要用浮点表示
有时常常用循环次数来表示循环终止的条件,比如:
1 int count = 0;
2 while(count < 10)
3 {
4 …
5 ++ count;
6 }
注意count不要用float和double,因为浮点的表示是近似的,99999.0+1的结果很可能还是99999.0!
(7) 控制循环体的长度
循环要尽可能地短,这样可以一目了然,一些研究表明,把嵌套控制在3层以内地比较好,另外,把长循环的内容移到子程序里会提升循环的可读性。
下面列出本章的要点:
(1) 循环本身是复杂的控制结构,所以保持循环体的简单将有助于别人阅读你的代码;
(2) 循环的入口要单一,出口也要明确;
(3) 避免出现依赖于循环下标最终取值的代码;
(4) 仔细考虑循环,确保在每一种情况下都能运行正常,并且所有可能的条件下都能正常退出。
<end>
浙公网安备 33010602011771号