zoukankan      html  css  js  c++  java
  • 《代码阅读方法与实现》阅读笔记二

    对本书的第二章和第三章的内容总结:

    2.6break和continue语句
    Break语句将程序转移到最内层的循环或switch语句之后执行。大多数情况下,break用于提前退出循环。Continue语句则跳过该语句到循环末尾之间的语句,继续最内层循环的迭代。Continue语句会再次计算while条件表达式的值,并执行循环。在for循环中,该语句将首先计算第三表达式的值,之后是条件表达式。Continue用在循环体分开处理不同情况的地方;每种情况一般都以continue结束,以便进行下一次循环迭代。
    2.7字符和布尔型表达式
    多数现代语言中,布尔表达式只对需要的部分进行求值。在用&&运算符(逻辑与)连接起来的表达式序列中,第一个表达式的求值结果如果为false,则会结束整个表达式的求值,并生成false结果。类似的,在用||运算符(逻辑或)连接起来的表达式序列中,如果第一个表达式求值为true,则会终止对整个表达式的求值,产生一个true结果。很多表达式都基于这种短路求值(short-circuit evaluation)特性,在阅读时也应该采用同样的方式。
    大多数从C派生的语言,都有短路求值的特性,比如C+=,Perl和Java。
    2.8 goto语句
    Goto语句应尽量少用。
    执行某些行动后(比如打印一条错误消息,或释放分配的资源),常常用goto语句退出程序或函数。有时用做公共的错误处理器。程序的正常退出路径位于错误处理器之前,从而保证当没有错误发生时,处理器不会被调用。
    Goto语句还经常用来重新执行某一段代码,可能是在某些变量的值发生改变,或者执行完某些处理之后。虽然这样的构造经常可以用结构化循环语句结合break和continue来完成,但实践中,使用goto有时能够更好地传达编码者的意图。一个单独的标记――几乎总是命名为again或retry,用做goto的目的地。
    在嵌套循环和switch语句中,goto语句可以用来替代break和continue――这两个语句只影响最内层循环的控制流程,改变程序的控制流程。在大型、复杂的循环中使用这种做法可以澄清控制流程的走向,同时避免了向嵌套循环中添加特定break或continue语句引发错误的可能性。
    2.9小范围重构
    在阅读自己所控制的代码时,要养成添加注释的习惯。
    2.10 do循环和整型表达式
    执行算术运算时,当b=2n-1时,可以将a&b理解为a%(b+1)。这样书写表达式是为了将除法替换为逐位与指令(有时计算起来更高效)。但现代处理器上,这种差别已经很小了,我们要学会阅读使用这些小技巧,但要避免使用它。
    还有两种情况,会用位指令来替代算术指令。它们是移位(shift)运算<<和>>――将整数的位向左或向右移动,由于整数每个二进制位的值均为2的幂,移位一个整数就等同于用2的幂去乘或除该整数,幂的次数就是移位的数目。因此,我们可以从算术意义来思考移位运算符。
    2.11再论控制结构
    第一个要记住的:每次只分析一个控制结构,将它的内容看作是一个黑盒。
    第二条规则:将每个控制结构的控制表达式看作是它所包含代码的断言。

  • 相关阅读:
    366. Find Leaves of Binary Tree输出层数相同的叶子节点
    716. Max Stack实现一个最大stack
    515. Find Largest Value in Each Tree Row查找一行中的最大值
    364. Nested List Weight Sum II 大小反向的括号加权求和
    156. Binary Tree Upside Down反转二叉树
    698. Partition to K Equal Sum Subsets 数组分成和相同的k组
    244. Shortest Word Distance II 实现数组中的最短距离单词
    187. Repeated DNA Sequences重复的DNA子串序列
    java之hibernate之基于主键的双向一对一关联映射
    java之hibernate之基于主键的单向一对一关联映射
  • 原文地址:https://www.cnblogs.com/dyc940210/p/4993111.html
Copyright © 2011-2022 走看看