《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周
《代码整洁之道》ch5~ch9读书笔记
本周我阅读了本书的第5~9章节,进一步了解整洁代码需要注意的几个方面:格式、对象与数据结构、错误处理、边界测试、单元测试和类的规范。以下我将分别记录各章的阅读心得体会。
1. Ch5: 代码格式:简单而一致
一直以来,“让代码能工作”是我编程时的头等大事。但事实上,尤其是涉及到体量庞大、经常修改的工程代码时,代码格式才是重中之重。显而易见,一套整洁规范的代码格式能给软件的开发、测试和维护提供巨大方便,而随心所欲或不统一的代码格式则会大大增加代码的阅读难度,也会让使用代码的人质疑开发者的专业程度、职业态度。
代码格式的原则有许多版本,因不同团队的需求、喜好,以及不同语言的特性而定。书中介绍了一些普适的原则,比如逻辑上联结紧密的语句应该编写得较靠近,不同功能的函数间最好相隔空行,水平、竖直缩进对齐等。结合适当的变量命名,这些简单的原则足以使代码清晰明确。
作为一支团队,代码的格式规则更是务必一致,追求“如一人所写”的效果。本周我们组在组会上也针对代码格式进行了讨论,参考网上众多的代码格式规范,决定在下一次组会选定相关格式。
2. Ch6:对象与数据类型:仔细的抉择
对象和数据结构各有特点。对象包含众多行为信息,但隐藏具体数据和实现手段,添加新对象类型并不需要修改既有的行为,较为方便,但难以添加新行为。而数据结构包含数据信息,没有明显的行为,因而添加新行为到数据结构中较方便,但向既有函数添加新数据结构是困难的。
作为开发者,我们需要在这两者间进行权衡和选择。同时,还要考虑到保密性、隐藏细节、用户体验等等。在这一层面,整洁代码的要求就是结构之间划分清楚,不要混杂使用,同时尽量少地暴露技术细节。
3. Ch7:错误处理:逻辑的保护
这一章主要阐述的并非整洁,而是强固。一份整洁的代码,也应当具有合格的强固性,不让各种报错将程序逻辑搅成一团乱麻。这也是对代码可维护性的保障。
每当我们编写函数,总要考虑各种预期外的情况及处理方式。至今为止,我采用的处理方式基本都基于函数返回值,这样的方法较简单粗暴,但涉及到大体量的代码时显然难以测试,其返回值还可能对其他调用的函数造成逻辑上的干扰。本章中,作者建议我们使用不可控异常来替代返回码报错,并对异常发生的环境进行说明。这样能将错误处理隔离,且try-catch模块易于测试、记录和理解。
较普适的原则:不要返回、传递null值。在刚接触链表等C语言数据结构时,我就经常犯下传递、调用null的错误,并因此付出了成堆的时间和精力。在大型程序中,null值的传递若引发错误,带来的后果是毁灭性的:当程序的深处抛出NullPointerException异常,实在令人手足无措。
4. Ch8:边界:第三方代码使用之道
编程实践中,我们常常调用他人代码以实现功能,本章就介绍了在“借刀杀人”时可能引发的边界问题以及回避之道。学习和使用第三方代码库事实上相当困难,我们往往需要花很多时间来阅读使用文档、尝试编写测试代码、整合调试等。而采用编写测试来对第三方代码遍览和理解,即学习性测试,能很好地帮助我们上手。
正如作者所言,学习性测试是“免费”的,因为即便我们不这样做,也仍需要在使用时对第三方代码进行反复测试。同时,它不会影响现有工作,还能“与版本俱进”地增强我们对第三方代码的理解,保证整洁的边界。简而言之,想要用好一台机器,比起拆开它研究具体细节或只是翻翻说明书,还是实际上手使用,体验、了解其特性后将其投入生产,来得方便快捷。
5. Ch9:单元测试:简洁而不简单
生产代码与测试代码的分量,事实上旗鼓相当。说来惭愧,我至今几乎没有编写过测试代码,debug时也往往只是根据题目要求手动输入各种数据。本章中,着重强调了单元测试代码的重要性:它们让我们对写出的代码拥有确保其如愿工作的能力,让我们的代码可扩展、可维护、可复用。一段没有被测试代码覆盖的生产代码,往往没有人敢轻易调用和维护。但正因如此,测试代码的篇幅往往不逊于生产代码,对测试代码的管理也成为一大课题。
对此,作者的观点很简单:可读性为王。测试代码的变量命名应当比生产代码更为精确,并遵循F.I.R.S.T原则:Fast(快速运行)、Indepent(相互独立)、Repeatable(可重复)、Self-Validating(有布尔值输出)、Timely(及时编写)。整洁的测试代码是保证生产代码不腐坏的必由之路。
总的来说,本周我通过对这五章内容的阅读,对整洁代码的编写规范、内核理念有了更深的理解。鉴于本书之后的章节基本围绕系统、并发编程等我尚未掌握相关知识的领域,下周起我将暂时转读其他书籍,待相关知识有一定基础后,再继续此书的阅读。
参考文献:
[1] Robert C. Martin. 代码整洁之道. 人民邮电出版社, 2010.1.
《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周的更多相关文章
- 《构建之法》CH5~6读书笔记 PB16110698 第九周(~5.15)
这段时间我阅读了<构建之法>的大部分章节,包括个人技能.软件测试.用户体验和需求分析等相关内容.之前的个人作业和结对作业结束后,我们的工作重心终于转向了团队项目,作为团队中前端组的组长,我 ...
- <读书笔记> 代码整洁之道
概述 1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...
- 《代码整洁之道》ch1~ch4读书笔记 PB16110698 (~3.8 第一周)
<代码整洁之道>ch1~ch4读书笔记 <clean code>正如其书名所言,是一本关于整洁代码规范的“教科书”.作者在书中通过实例阐述了整洁代码带来的种种利处以及混乱代码 ...
- <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
- 《代码整洁之道》(Clean Code)- 读书笔记
一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...
- 如何写出如散文般的代码――《代码整洁之道》读书笔记(Ch1-Ch3)
不知道有多少人像我一样,程序出现问题时添加函数添加变量解决,变量名用a,b,c等"简单"的字母来表示.不知道有多少人像我一样,看完自己的代码,心里暗骂"什么玩意儿!&qu ...
- Programming好文解读系列(—)——代码整洁之道
注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御 ...
- 《代码整洁之道》&《程序员的职业素养》
这是why技术的第32篇原创文章 春节期间读了两本技术相关的书籍:编程大师Bob大叔的<代码整洁之道>和<代码整洁之道:程序员的职业素养>. <代码整洁之道>出版于 ...
- 读《Clean Code 代码整洁之道》之感悟
盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊.我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手 最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句 ...
随机推荐
- idea和eclipse快捷键对比(转)
分类 功能点 Eclipse快捷键 IDEA快捷键 搜索 搜索文本 Ctrl + F Ctrl + F Ctrl + R 查找替换 Alt + P/A 逐个/全部替换 Alt + F3 查找当前选中词 ...
- APC注入DLL(win7下有问题)
void APCKernelRoutine(PKAPC pKAPC, PKNORMAL_ROUTINE pUserAPC, PVOID pContext, PVOID pSysArg1, PVOID ...
- ionic-CSS:ionic icon(图标)
ylbtech-ionic-CSS:ionic icon(图标) 1.返回顶部 1. ionic icon(图标) ionic 也默认提供了许多的图标,大概有 700 多个,针对 Android 和 ...
- SPI 通信
Frm: http://www.wzaobao.com/p/l5079K.html http://blog.csdn.net/xqmoo8/article/details/8043474 http:/ ...
- 拾遗:Git 基础
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ 一.参数配置 $ git con ...
- !!!myeclipse 上加载本地图片问题,无法加载问题
出现无法加载本地图片的问题, 原因就是把图片放到了本地项目中的image了,但是myeclipse上没有刷新 这样以后 本地的图片比在线的要快 低级错误,诶!
- jupyter安装_pip法
安装jupyter notebook的流程(注意python至少需要3.6版本) python -m pip install jupyter #安装jupyter python -m pip ins ...
- enumrate用法
转自*https://www.runoob.com/python/python-func-enumerate.html*侵删 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组 ...
- <Django>一些小知识
''' ORM import pymysql pymysql.connect( ... ... ) 1.不同的程序员写的SQL水平参差不齐 2.执行效率也参差不齐 python语法 --自动翻译 -- ...
- 2-JDK环境变量配置和验证
背景: 官网下载,默认路径安装,如下图,java目录下有两个文件夹:jdk和jre: 1.计算机 -> 右击 -> 属性 -> 选择左侧的'高级系统设置' 2.高级系统设置 -> ...