新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > <读书笔记> 代码整洁之道

<读书笔记> 代码整洁之道

作者:时间:2016-08-01来源:网络收藏

  概述

本文引用地址:http://www.eepw.com.cn/article/201608/294841.htm

  1、本文档的内容主要来源于书籍《整洁之道》作者Robert C.Martin,属于读书笔记。

  2、软件质量,不仅依赖于架构和项目管理,而且与质量紧密相关,本书提出一种,质量与整洁成正比的观点,并给出了一系列行之有效的整洁代码操作实践,只要遵循这些规则,就可以编写出整洁的代码,从而提升代码质量。

  3、该书介绍的规则均来自于作者多年的实践经验,涵盖从命名到重构的多个编程方面,具有很好的学习和借鉴价值。

  4、习艺要有二:知和行。你应当学习有关规则、模式和实践的知识,穷尽应知之事,并且对其了如指掌,通过刻苦实践掌握它!

  前言

  学习整洁代码很难,它不止于要求你掌握原则和模式,你还得在上面下功夫,并自行实践,体验失败。你须观察他人如何实践与失败,怎样蹒跚学步,再转头学习他们的路数,。

  本书要求你多用信息,多用功,而且非常用功。如何用功?-大量阅读代码,并琢磨代码好在什么地方,坏在什么地方。

  本书大概分为三部分:原则、模式和实践。

  一、 使用有意义的命名

  1、名副其实

  注意命名,一旦发现有更好的名称就换掉旧的,这么做阅读的人会更开心

  名称本身应该能解释其含义,无需注释就能看懂是最佳。比如

  int d;//消失时间,以日计

  int elapsedTimeInDays;

  前者名称没有任何含义,在程序中使用时看不出这个变量的实际作用,需要对应注释才能看懂,因此远不如后者的名称好!

  2、避免误导

  程序员必须避免留下掩藏代码本意的错误线索,避免使用与本意相悖的词。

  提防使用细节之处差别较小的名称

  使用相同的拼写方式,前后拼写不一致(大小写不同),就是误导。在使用编辑器名称自动补全功能时,拼写相近的变量容易引起误选。

  避免使用小写字母l和大写字母O作为变量名称,易与1和0混淆

  3、做有意义的区分

  避免以数字系列命名,其无法提供正确的信息和导向作者意图的线索。

  不要使用意义相近的名称,比如ProductInfo和ProductData变量不同,意思一样,容易引起意义混淆

  不要使用冗余信息,比如NameString,难道Name会是一个浮点数吗?如果是,就不该使用Name命名。

  4、使用读的出来的名称

  人类善于记忆和使用单词,如果名称无法阅读或者发音,就不是一个好名称,讨论和交流时也难以表达。

  比如函数名称为:genymdhms()//生成日期,年月日时分秒。

  不要使用傻乎乎的自造词,而要使用恰当的英语单词

  5、使用可搜索的名称

  比如字母e,f等就不是一个好的变量名,其是英文常用字母,不方便搜索,

  单字母名称仅限于本地局部变量使用,名称长短应该与作用域大小相对应

  如果程序中多出使用相同数字,实现相同功能,则需要使用宏定义变量代替。

  比如WORK_DAYS_PER_WEEK就比数字5好搜索,也更能体现作者意图

  6、避免使用编码

  无需把类型和作用域编进名称,这样只会自找麻烦,既不便发音,也容易拼错,对解决问题毫无帮助。

  匈牙利标记法,破坏了不编码的规则,不应该采用。

  也不必使用成员前缀,应该把类和函数做的足够小,同时使用可以高亮和颜色标出成员的编辑环境。(Keil,notepad++都支持)。

  7、避免思维映射

  不应当让读者把你脑中的名称翻译成他们熟知的名称,这个问题常见于选择使用问题领域的术语还是解决方案领域的术语时。

  在作为局部变量时,并且名称没有冲突时,可以采用i,j,k作为循环变量。

  专业程序员善用其能,编写能让他人理解的代码

  8、类名

  类名应该是名称或者名词短语,例如Customer、Account,避免使用Manager、Data、Info这样的类名,其不应该是动词。

  9、方法名

  方法名应该是动词或者动词短语,比如postPayment、deletePage或s**e,属性访问应该加上set、get、is前缀

  10、每个概念对应一个词

  给每个抽象概念选用一个词,并且一以贯之。比如使用fetch、retrieve、get在多个类的中同种方法命名,就容易引起混淆。

  11、别用双关语

  避免将以此用于不同目的,同一术语用于不同概念就是双关语了。

  比如多个类中都有add方法,该方法通过增加或者链接两个现存值来获得新值,如果一个新类的含义是,把单个参数放到群集(collection)中,使用add名称,虽然保持了名称一致,你是含义却不同,应该使用insert才对。

  12、使用解决方案领域的名称

  因为只有程序员才会读取你的代码,因此名称应该选择解决方案领域的名称,而不是问题设计领域的名称。比如名称AccountVisitor就比JobQueue富有意义。

  13、使用源自所涉及问题领域的名称

  当不能使用程序员所熟悉的术语命名时,就应该采用所涉及问题领域的名称

  与所涉问题领域更加贴近的代码,应当采用源自问题领域的名称

  14、添加有意义的语境

  很少有名称能够自我说明-多数都不能,因此需要使用良好命名的类、函数来放置名称,给读者提供语境。

  比如添加前缀addrFirstName、addrLastName、addrState,就可以提供语境,这些变量属于地址范围。更好的做法是,创建一个名称为Address的类,来存放这些相关变量。

  语境的增强也让算法能够通过分解为更小的函数而变得干净利索。

  15、不要添加没有意义的语境

  比如应用(Gas Station Deluxe)简称为GSD,因此为每个函数、类、变量增加同样的前缀就GSD命名就不是一个好点子。

  Address是个好名称,但是如果需要与MAC地址、端口地址或Web地址区分,应当使用PostalAddress、MAC、URI,这样的名称更为精确。

  16、总结

  取名字最难地方在于需要良好的描述技巧和共有的文化背景

  试试上面的规则,看你的代码的可读性是否有所提升。如果维护别人的代码,使用重构工具来解决问题,效果也好立竿见影,而且会持续下去。


上一页 1 2 下一页

关键词: 代码 TDD

评论


相关推荐

技术专区

关闭