《代码阅读方法》---笔记(第二章)

第2章:基本编程元素

基于原文是分点来的,这里我尽量整理一下语言和文字方式便于大家联想记忆。

1.开始

从main开始,运行程序理解功能,理解命名规定可以帮助猜测对应功能,一个程序从重要核心部分开始。

  1. 第一次分析一个程序时,main是一个好的起始点。
  2. 要想了解程序在某一方面的功能,运行它可能比阅读源代码更为恰当。
  3. 在分析重要的程序时,最好首先识别出重要的组成部分。
  4. 了解局部的命名约定,利用它们来猜测变量和函数的功能用途。

2.结构理解

以控制结构为单位进行分解,内容视为黑盒,可以进行代码简化推理,通过里面的循环等结构理解实现过程。

  1. 每次只分析一个控制结构,将它的内容看作是一个黑盒。
  2. 将每个控制结构的控制表达式看作是它所含代码的断言。
  3. 用复杂循环的变式和不变式,对循环进行推理。
  4. 使用保持含义不变的变换重新安排代码,简化代码的推理工作。

3.语法细节

介绍常用的一些语法结构的阅读细节。

  1. 选择结构:层叠if-else if-… -else 序列可以看作是由互斥选择项组成的选择结构。
  2. 循环结构:for(i=0; i<n; i++) r 形式的循环执行n次;其他任何形式都要小心。do循环的循环体至少执行一次。
  3. 逻辑表达式:在阅读逻辑乘表达式时,总是可以认为正在分析的表达式以左的表达式均为true;在阅读逻辑和表达式时,类似地,可以认为正在分析的表达式以左的表达式均为false。
  4. 运算符:将使用条件运算符?:的表达式理解为if代码。
    执行算术运算时,当b=2^n-1时,可以将a&b理解为a%(b+1)。
    将a<<n理解为a * k , k = 2 ^ n。
  5. return, goto, break 和continue语句,还有异常,都会影响结构化的执行流程。由于这些语句一般都会终止或重新开始正在进行的循环,因此要 单独推理它们的行为。

4.阅读策略

主要有自底向上和自顶向下的分析两种,借助外部文档与代码注释。测试尝试运行代码中理解功能,代码模块由简到难、由部分到整体去理解。

  1. 代码阅读有许多可选择的策略:自底向上和自顶向下的分析、应用试探法和检查注释和外部文档,应该依据问题的需要尝试所有这些方法。
  2. 当基于猜测修改代码时,您应该设计能够验证最初假设的过程。这个过程可能包括用编译器进行检查、引入断言、或者执行适当的测试用例。
  3. 我们经常可以将表达式应用在样本数据上,借以了解它的含义。
  4. 解决困难的代码要从容易的部分入手。
  5. 理解了代码的某一部分,可能帮助您理解余下的代码。
  6. 要养成遇到库元素就去阅读相关文档的习惯;这将会增强您阅读和编写代码的能力。

5.代码格式与宗旨

注意代码的易读性、效率、复杂性。多加注释、格式统一。

  1. 重新组织您控制的代码,使之更为易读。
  2. 不需要为了效率,牺牲代码的易读性。
  3. 高效的算法和特殊的优化确实有可能使得代码更为复杂,从而更难理解,但这并不意味着使代码更为紧凑和不易读会提高它的效率。
  4. 创造性的代码而已可以用来提高代码的易读性。
  5. 我们可以使用空格、临时变量和括号提高表达式的易读性。
  6. 在阅读您所控制的代码时,要养成添加注释的习惯。
  7. 我们可以用好的缩进以及对变量名称的明智选择,提高编写欠佳的程序的易读性。
  8. 用diff程序分析程序的修订历史时,如果这段历史跨越了整体重新缩排,常常可以通过指定-w选项,让diff忽略空白差异,避免由于更改了缩进层次而 引入的噪音。

参考:
https://blog.csdn.net/weixin_42561498/article/details/87378105

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值