Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85024
  • 博文数量: 34
  • 博客积分: 1640
  • 博客等级: 上尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-17 14:37
文章分类
文章存档

2008年(34)

我的朋友
最近访客

分类:

2008-04-17 16:00:13

这一章应该是我阅读过的三章中比较复杂的一章了吧。这章讲解的是如何来使用Loop。Loops按照我们可以适用的表达方式来说可以分为三类:for, while, do-while。我们使用Loops的情形可以分为四类:
1. Counted Loop; 也就是执行特定次数的Loop,一般使用for结构
2. 不知道loop的具体执行次数,只知道在什么条件下推出程序,一般使用while或do-while结构
3. endless loop, 使用for(;;)或while(true)结构
4. iterator case,一般用于依次访问集合中的元素。
另外,按照我们进行测试的位置我们又可以分为三种情况:在loop的开始进行测试(for, while),在loop的中间执行(while),或在loop的结束执行(do-while)。
需要注意的一些programming practice:
1. for语句只用于那些包含简单变量的递增或递减的情形。并且for语句中的loop控制变量只在for语句的开始部分进行更改。不要再for语句的Loop内部对控制变量进行更改,如果有这种需求的话,应该是用while语句。
2. 尽量减少控制loop结构的变量
3. 将loop里面的语句作为一个黑箱看待。最佳情况是:当我们理解一个loop结构时,并不要求我们理解loop结构里面的语句,只要看了loop的测试语句我们就应该可以推出该loop的大致功能。这也就是要求我们应尽量将控制结构放在loop结构的外面。
4. 如果可以使用for语句,尽量使用for语句。因为for语句将所有的控制结构都放在了for结构的开始,让我们可以一目了然,减少我们出错的可能性。因为一个常见的错误就是忘记了改变控制变量。使用for语句的条件参见1.
5. 尽量避免使用empty loops。(在实际中,好像我自己很喜欢使用这种结构。) 一般情况下我们可以将这种emtpy loops转换为其他等价的loop结构。
6. 对loop变量的控制应尽量放在loop结构的开始或是结尾。尽量不要放在结构的中间,这样不利于阅读。
7. 每个loop应该只完成一种功能。如果需要完成不同功能时,使用多个loop结构。一般来说,想在同一个loop结构中完成多种功能是基于性能的考虑。但在没有确定性会很差的情况下,最好还是遵守这个约定。
8. 在for结构之后的语句不要存取for结构的loop变量。
9. 为了确保loop结构最终会结束,可以使用safty counter。
10. Loop结构一般有三个checkpoints: first case, an arbitrarily selected middle case, last case。我们应该确保loop结构在这三种情况都运行正确,确保没有off-by-one errors。常用的方法有:mental simulations和hand calculations.
11. 对于loop变量的使用应该注意:对于简单的情况我们可以使用i,j,k。但是对于nested loops我们应该使用meaningful variable names. loop variables的使用范围应该只限制在loop结构之内,而不要在Loop结构之外使用这些变量。
12. loop结构的长度应该限制在一页之内。loop的嵌套层次限制在三层。

这一章作者处理讲解了如何使用各种loop结构之外,还想我们讲解了一种创建loop结构的方法。也就是从内向外创建loop结构的方法。其基本思想是首先不要考虑loop结构,而只考虑一般情况,也就是loop结构的内部语句,然后从这些语句中提取出Loop变量,加上loop的控制语句就可以了。这也就是将loop的构造分为两个部分,首先我们构建黑箱部分,然后再考虑控制结构,这样的话我们每次只集中考虑一件事情,应该会更简单。

这部分包含了太多的内容,应该在实践中多多使用才有可能完全掌握。
阅读(561) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~