代码应当易于理解

代码的写法应当使他人理解它所需的时间最小化

把信息装进名字中

清晰和精确比装可爱好
使用专业的词
使用详细的名字来更仔细地描写叙述事物
给变量名带上重要的细节
为作用域大的名字採用更长的名字
有目的地使用大写和小写。下划线等
要多问自己几遍:“这个名字会被别人解读成其它的含义吗?” 要仔细审视这个名字,不会被误解的名字是最好的名字
命名极限最清晰的方式是在要限制的东西前加上max_或者min_
为布尔值命名时,避免使用反义的词(比如disable_ssl)
要小心用户对特定词的期望。

比如,用户会期望get()或者size()是轻量的方法

审美

一致的风格比“正确”的风格更重要
假设多个代码块做类似的事情。尝试让他们有相同的剪影
把代码按“列”对齐能够让代码更easy浏览
假设在一段代码中提到A,B,C。那么不要在还有一段中说B,C,A。选择一个有意义的次序。并始终用这种顺序
用空行来把大块代码分成逻辑上的“段落”

凝视

凝视的目的是尽量帮助读者了解的和作者一样多
什么地方不须要凝视:- 能从代码本身中迅速地判断的事实- 用来粉饰烂代码的“拐杖式凝视”--应该把代码改好
你应当记录下来的想法包含:- 对于为什么代码写成这样而不是那样的内在理由(“指导性批注”)- 代码中的缺陷,使用像TODO:或者XXX:这种标记- 常量背后的故事,为什么是这个值
站在读者的立场上思考:- 预料到代码中哪些部分会让读者说:“啊?” 而且给他们加上凝视- 为普通读者意料之外的行为加上凝视- 在文件/类的级别上使用“全局观”凝视来解释全部的部分是怎样一起工作的- 用凝视来总结代码块,使读者不至于迷失在细节中
凝视应当有非常高的信息/空间率
尽量精确地描写叙述函数的行为
在凝视中用精心挑选的输入/输出样例进行说明
声明代码的高层次意图,而非明显的细节
用含义丰富的词来使凝视简洁

控制流

把条件。循环以及其它对控制流的改变做的越“自然”越好,运用一种方式使读者不用停下来重读你的代码
相对于追求最小化代码行数,一个更好的度量方法是最小化人们理解它所需的时间
当你对代码做修改时,从全新的角度审视它。把它作为一个总体来看待
在写一个比較时,把改变的值写在左边而且把更稳定的值写在右边更好一些
你也能够又一次排列if/else语句中的语句块,通常来讲。先处理正确的/简单的/有趣的情况
尽量不要用三目运算符
嵌套的代码块须要更加集中精力去理解,应该把它们改写成更加“线性”的代码来避免深浅套
通常来讲提早返回能够降低嵌套并让代码整洁

表达式

把你的超长表达式拆分成更easy理解的小块
要小心“智能”的小代码块--它们往往在以后会让别人读起来感到困惑
引入“解释变量”来代表较长的子表达式,这种方式有三个优点:- 它把巨大的表达式拆成小段- 它通过用简单的名字描写叙述子表达式来让代码文档化- 它帮助读者识别代码中的主要概念
用德摩根定理来操作逻辑表达式--能够把布尔表达式用更整洁的方式重写(比如if(!(a&&!b))变成if(!a||b))
有时须要把问题“反向”或者考虑目标的对立面

变量与可读性

你希望你的同事随时都认为是在面试吗
让你的变量对尽量少的代码行可见
操作一个变量的地方越多。越难以确定它的当前值
降低变量,即那些妨碍的变量
减小变量的作用域。越小越好,把变量移到一个有最少代码能够看到它的地方,眼不见,心不烦
仅仅写一次的变量更好。那些仅仅设置一次值的变量(或者const, final, 常量)使得代码更easy理解

又一次组织代码

把一般代码和项目专有的代码分开
应该把代码组织得一次仅仅做一件事情
把想法变成代码,用自然语言描写叙述解决方式
最好的代码就是没有代码
删除无用的代码
从项目中消除不必要的功能,不要过度设计
又一次考虑需求,解决版本号最简单的问题。仅仅要能完毕工作即可
常常性地通读标准库的整个API,保持对他们的熟悉程度--“不要反复造轮子”

測试

測试也应当具有可读性。以便其它程序猿能够舒服地改变或者添加測试
对使用者隐去不重要的细节,以便更重要的细节会更突出
让错误消息具有可读性
又简单又能完毕工作的測试值更好
每一个測试的最高一层应该越简明越好。最好每一个測试的输入/输出能够用一行代码来描写叙述
假设測试失败了,它所发出的错误消息应该能让你easy跟踪并修正这个bug
使用最简单的而且能够完整运用代码的測试输入
给測试函数取一个有完整描写叙述性的名字,以使每一个測试所測到的东西非常明白,不要使用test1()。而要使用test_<functionName>这种名字
最重要的是。要使它易于修改和添加新的測试

转载于:https://www.cnblogs.com/zfyouxi/p/5096685.html

《编写可读代码的艺术》读后总结相关推荐

  1. 《一线架构师实践指南》—— 读后总结

    之前总觉得架构是一件很高大上的工作,跟普通的编码设计不太一样.前一段实践,自己也尝试做过架构的工作,可惜经验不足导致架构非常混乱.这里读完这本书,大体上对架构的工作有所了解,也稍微摸清了些门道. 我理 ...

  2. 读了本号称“App架构师实践指南”的书

    大家好我是张拭心,最近读了本书,书名比较厉害<App架构师实践指南>,读完还是有一定收获的,记录分享给大家. 什么是 app 架构师 这本书主要内容 读完感受 什么是 App 架构师 成为 ...

  3. 《App架构师实践指南》:移动开发的进阶指南

    文章主要内容: 什么是 app 架构师 这本书主要内容 读完感受 什么是 App 架构师 成为"架构师"是许多程序员的梦想,当然也包括我,在工作的几年里,我见过很多架构师,他们在设 ...

  4. App架构师实践指南四之性能优化一

    1.性能维度 常见用来衡量App性能的维度如图9-1所示.其中,性能指标包括电池(电量/温度).流量(上行流量/下行流量等).CPU(平均/最大/最小).内存(平均/最大/最小).帧率(平均/最高/最 ...

  5. Android屏幕适配很难嘛其实也就那么回事,app架构师实践指南pdf

    程序员的劫 最近,又被程序员年龄的事情刷屏了.37岁被公司优化,找工作几个月都没有很好的归属,所谓的小公司还看不上.等等类似的话题变成了程序员的吐槽固定标题,无论是程序员,还是其他行业人员,都可以就这 ...

  6. 高级架构师都在读的10本Java实战书籍,Java开发进阶必备书单

    关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单. 在下面这 1 ...

  7. 大厂资深架构师都在读的10本Java实战书籍,Java开发进阶必备书单

    入门 <SSM企业级框架实战> 作者: 肖睿/丁慧洁/张宁彬 **简介:**框架(Framework)的本质为某种应用的半成品,即把不同应用程序中的共性内容抽取出来而形成的半成品程序.SS ...

  8. 架构师实践日 · 6.30 杭州站 | 视觉 AI 技术如何助力行业提升?来西子湖畔与业内大咖面对面交流!

    伴随内容形式的变迁(文字 → 图片 → 视频),目前视觉 AI 技术不仅被应用到传统领域的升级革新中,还作为最重要的基础人工智能技术渗透到前沿技术的创新研究中. 七牛架构师实践日第二十九期将以视觉 A ...

  9. 如何构建 FinTech 科学反欺诈体系|架构师实践日

    微众圈 > 微信资讯 > 科技 > 文章 如何构建 FinTech 科学反欺诈体系|架构师实践日 摘自公众号:七牛云发布时间:2017-4-11 21:28:33 FinTech,即 ...

  10. 【架构师实践课】微服务如何拆分?大型微服务项目从何下手?

    继上期[架构师实践课]单体和微服务怎么选?单体到微服务怎么转?之后,万老师为我们带来了微服务系统设计专题的第二个议题:微服务设计痛点. 以下内容根据实践课整理. 微服务如何拆分 首先想和大家分享的,就 ...

最新文章

  1. VSCode搭建ARM(STM32开发环境)
  2. javascript-基本数据类型和转换
  3. php开发微信图灵机器人
  4. list转字符串_剑指offer 38——字符串的排列
  5. 多维标度法MDS古典解的证明与R语言实现
  6. sql server从一个数据库复制一张表到另外一个数据库
  7. java内存映射缓存,java – 用于数据库实现的内存映射的MappedByteBuffer或直接ByteBuffer?...
  8. Unity3D开发之VideoPlayer
  9. python迅雷下载器_简单的迅雷VIP账号获取器(Python)
  10. win10无法装载iso文件_win10专业版系统无法加载iso文件怎么办
  11. LIME-AI可解释模型:《“Why Should I Trust You?” Explaining the Predictions of Any Classifier》论文笔记
  12. Kubernetes利用CNI-bridge插件打通网络
  13. Qt5 QML TreeView currentIndex当前选中项的一些问题
  14. 十大家用智能监控摄像头品牌排名
  15. 流媒体直播防盗链安全控制
  16. Leetcode 1419:数青蛙(超详细的解法!!!)
  17. 小觅摄像头Opencv处理
  18. 测开 - 进阶篇 - 细节狂魔
  19. 查找素材终极神器,视频片段查找神器!
  20. 新手入门板卡硬件调试

热门文章

  1. 远程值守_北京静态交通公司首个远程值守停车场投入使用
  2. MYSQL专题-MySQL事务实现原理
  3. 坚式计算机在线,小学数学竖式计算器
  4. chartcontrol饼状图属性设置_温故而知新,ggplot2 饼图的几点笔记
  5. 如何运用python爬游戏皮肤_Python爬虫实战之 爬取王者荣耀皮肤
  6. 一看就会的OSPF路由协议综合实验
  7. 【基础大全】一文带你打好网工路由基础......
  8. 嵌入式 linux 程序不能运行,嵌入式Linux中在开发板上/usr/bin目录下不能运行自己交叉编译的程序...
  9. oracle导出库压缩参数,oracle数据库的定时备份:导出 压缩 归类
  10. 云栖掠影|回首开源十年,RocketMQ 焕发新生