zoukankan      html  css  js  c++  java
  • 读书笔记_代码大全_第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>

  • 相关阅读:
    JAVA日常之三
    java将字符串存入oracle的Blob中
    java连接oracle数据库
    JAVA日常之二
    JAVA日常之一
    linux日常命令之三
    linux日常命令之二
    linux日常命令之一
    Python之路【第四十篇】:django日更
    Python之路【第三十九篇】:django日更
  • 原文地址:https://www.cnblogs.com/jerry19880126/p/2833155.html
Copyright © 2011-2022 走看看