《代码阅读方法与实践》读书笔记2

这几天我开始看这本书的正式的内容,而且这本书也即将看完了,总体上我对本书的内容进行一个简要的讲述:

第一章  导论:

本章主要讲述了作者对于本书的观点以及对于本书的阅读方式做了一个讲解,并且提到了阅读代码的重要性;在看到本书中对于低品质的代码的识别的几个方法之后,我沮丧地发现我在之前写的所有的代码都是!!

第二章 基本编程元素:

在这一章中,作者用了两个完整的例子,一步步的分析了它的工作机制;还讲解了常见的控制结构、构件块、习惯用法和一些错误用法。就我们目前的环境而言,在阅读代码时,我们习惯的是用编译器对代码进行编译,检查产生的错误,我们并没有对代码进行进一步详细的品读;当然这也是开始阅读代码的第一步。作者在这一章中先分析了一个完整的程序,并由它贯穿始终;而且提到了一种阅读代码的可选择的策略:自底向上和自顶向下的分析、应用试探法和检查注释和阅读外部文档。

讲到了我们在拿到了一个程序时,我们应该先识别出重要的组成部分:头文件、全局变量、函数的前置声明。然后大致的了解一下函数的功能,其中讲到了几种方法:1、猜,基于函数名,2、阅读位于函数开始部分的注释,3、分析如何使用函数,4、阅读函数体的代码,5、查阅函数外部的文档。

在分析控制结构时,每次只分析一个控制结构,将它的内容看作是一个黑盒子,将每个控制结构的控制表达式看作是它所包含代码的断言,这将有助于我们对控制结构代码的理解。

这时,我们可能遇到理解困难的代码,那么我们应该从容易的部分开始,渐进式的理解方式来理解;接下来就讲到了在阅读代码时遇到的各种循环的语句,条件语句中常见的使用方法以及错误用法、陷阱等。在讲到goto语句时,引起了我的注意,遇到标记时应该立即引起足够的重视,它们容易被误用,创造出“意大利面条”式的代码,即代码的控制流程难以跟踪和断定。在java中,设计师就没有将goto语句加入。

不知道我在哪儿听到的,但我信以为真的一句话:代码的可读性与效率在某种程度上不能兼顾。读完本章我了解了:高效的算法和特殊的优化确实有可能使得代码更为复杂,从而更难以理解,但这并不意味着使代码更为紧凑和不易读,会提高它的效率。而且,有时创造性的代码布局还可以用来提高代码的易读性。

第三章 高级C数据类型:

这一章讲到了:指针、结构、共用体、动态内存和类型名称声明。

其中,指针的一般用法有:1、构造链式数据结构;2、引用动态分配的数据结构;3、实现引用调用;4、访问和迭代数据元素;5、传递数组参数;6、引用函数(在C语言中并不允许)7、作为其它值的别名;8、代表字符串;9、直接访问系统内存

结构的一般用法有:1、将一般作为一个整体来使用的数据元素集合到一起;2、从函数中返回多个数据元素;3、构造链式数据结构;4、映射数据在硬件设备、网络链接和存储介质上的组成方式;5、实现抽象数据类型;6、以面向对象方式编程

共用体(将共享同一存储区域的项聚合起来)的一般用法有:1、有效地利用存储空间;2、实现多态(最常见的应用);3、使用不同的内部表达方式对数据进行访问

第四章 数据结构:

这一章与我们开设的课程《数据结构与算法》中,用到的书籍由严蔚敏等编著的《数据结构(C语言版)》中有详尽的讲解,所以在这儿我只是快读了一遍,其中都讲到了:向量、矩阵和表、栈、队列、映射、聚合、链表、树、图;并没有其他的更深入的内容。

第五章 高级控制流程:

这一章是在第三章的基础上进一步的深入,讲到了编程中更为高级的,语句更为复杂的控制结构,有递归的调用、异常机制、并行处理、异步信号和非局部跳转还有预处理器的宏替换功能。

在递归的调用中,需要注意的是尾递归的判别条件,这是一个关键;异常要么是为了响应一个错误条件而显式生成,要么是调用了可以触发异常的方法,从而隐式地生成,如果生成的异常不是Error或RuntimeException异常的子类,那么该方法必须用throws子句声明该异常。如果出现了没有被捕获的异常,那么程序将会被终止,同时报告一段诊断消息以及栈的踪迹。这时含糊不清的错误报告将会使毫无防范的用户感到一头雾水,所以我们应该确保程序检查并恰当地处理所有可能产生的异常。

 

通过对前五章的阅读,我们对于小型的程序已经能够很好的去解读它的代码了,前五章中将我们在编写程序中遇到的基本元素、高级的数据类型、数据结构以及控制流程都有了一个了解,并且有了一个去阅读它们的方法,那么就让我们在以后的代码阅读中去逐渐的应用它们吧。

你可能感兴趣的:(《代码阅读方法与实践》读书笔记2)