《编写可读代码的艺术》之读后感

代码应当易于理解

可读性基本原理

关键思想: 代码的写法应当使别人理解它所需的时间最小化。

可读性基本定理总是先于任何其他条例或原则。

表面层次的改进

如果你的代码有很棒的名字、写的很好的注释,并且整洁地使用了空白符,你的代码会变得易读很多。

命名艺术

  • 选择专业的词
    • 选择的词要能表达清楚信息,比如树的高度,就可以用 height 而不是 size。
  • 避免泛泛的名字(或者说要知道什么时候使用它)
    • 好的名字应当描述变量的目的或者它所承载的值。
    • 比如 tmp,如果这个变量的唯一目的就是临时存储,它的整个生命周期只在几行代码之间,这个变量没有其他职责,不会被传到其他函数中国或者被重置以反复使用,那么就可以使用 tmp, 但是如果变量最重要的目的不是临时存储,那么就应该用一个可以表示变量意义的名字来代替 tmp ,这样会更加具有描述性。
  • 用具体的名字代替抽象的名字
  • 使用前缀或后缀来给名字附带更多信息
    • 比如变量如果表示时间,可以加上单位来让变量表示更加清晰。
  • 决定名字的长度
    • 如果变量作用域比较小,可以不用附带太多信息,名字长度可以短一些。
    • 如果名字中的某些单词可以拿掉而不会损失任何信息,那么久可以丢掉这些没用的词。
    • 如果变量作用域比较大,可以采用比较长的名字,易于理解。
  • 利用名字的格式来表达含义
    • 有目的地使用大小写。
  • 不会误解的名字
    • 很多英语单词在用来编程时是具有多义性的,在命名的时候,需要考虑这个名字是否会被误解为另外一种意思,好的名字是不会被误解的。

审美艺术

养眼代码的原则

  • 选择一个有意义的顺序,并且始终一致地使用它。
  • 让相似的代码看上去相似。比如可以采用列对齐的方式来排列参数,让代码看上去更清晰易读。但是这样也存在维护困难的问题,所以要慎重考虑。
  • 把相关的代码行分组,形成代码块。比如输入、实现、输出就可以分成不同的代码块。

关键思想:一致的风格比“正确”的风格更加重要。

注释艺术

关键思想:

  • 注释的目的是尽量帮助读者了解得和作者一样多。
  • 不要为那些从代码本身就能快速推断的事实写注释。

什么时候加注释

  • 可以为代码中的瑕疵加注释,比如TODO、FIXME等。
  • 可以用注释来总结代码块,易于读者理解。

加注释的要点

关键思想:注释应当有很高的信息/空间率。

  • 避免使用不明确的代词,比如 it。
  • 精确描述函数的行为。
  • 声明代码的高层次意图,而非明显的细节。
  • 用含义丰富的词来使注释更加简洁。

控制流艺术

关键思想:把条件、循环以及其他对控制流的改变做的越“自然“越好,运用一种方式使读者不用停下来重读你的代码。

原则:

  • 在写一个比较时,比较的左侧表达式的值更倾向于不断变化,比较的右侧表达式的值更倾向于常量。
    比如:while(bytes_received < bytes_expected)while(bytes_expected > bytes_received)更易读懂。
  • 在写if/else语句的语句块时,if 中国尽量先处理正确的、简单的情况。比如,用if(debug)而不是if(!debug)
  • 尽量使用线性的代码,避免深层次的嵌套。

表达式艺术

关键思想:把超长的表达式拆分成更容易理解的小块。

方法:

  • 引入解释变量来代表子表达式,帮助读者理解长表达式的意思。
  • 用德摩根定理来操作逻辑表达式,比如,if(!(a && b))可以变为if(!a || b)

变量艺术

原则

  • 减少变量,比如一个临时变量只用过一次,就没有必要声明这个变量,因为它没有压缩任何冗余代码。
  • 缩小变量的作用域,变量的作用域越大,越难掌握在哪里会用到这些变量,有可能会出现局部变量改变全局变量的情况。
  • 那些只设置一次值得变量,比如const、final等,可以 让代码更容易理解。

一次只做一件事的艺术

关键思想:应该把代码组织得一次只做一件事情。

流程:

  1. 列出代码所做的所有任务。
  2. 尽量把这些任务拆分到不同的函数中。或者至少是代码中的不同的段落中。

把想法变成代码

流程:

  1. 假设你面前有一个人,对着他清楚地描述代码要做什么,它的逻辑是什么。
  2. 注意描述中所用的关键词和短语。
  3. 写出与描述所匹配的代码。

Tips:如果需要,可以买一只小黄鸭,让它听你描述。

少写代码的艺术

关键思想:最好读的代码就是没有代码。

避免写新代码的原则:

  • 从项目中消除不必要的功能,不要过度设计。
  • 重新考虑需求,解决版本最简单的问题,只要能完成工作就行。
  • 多读标准库中的API,保持对它们的熟悉程度。

测试与可读性

关键思想:测试应当具有可读性,以便于其他程序员可以舒服地改变或者增加测试。

改进测试的要点:

  • 测试的输入/输出最好可以用一行代码来描述。
  • 测试失败后发出的错误信息要易于让你去跟踪并修正这个bug。
  • 使用最简单并且能够完整运用代码的测试输入。
  • 给测试函数取一个有完整描述性的名字。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,058评论 25 707
  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,581评论 0 17
  • 这一生也在进取 这分钟却在沉睡 曾经向往自由 执着远方 你太累了 真的太累了 旁友怜悯你 及时道别没有罪 你却依旧...
    心花4ever阅读 190评论 0 0
  • 好久没有动笔了,来两条丝瓜。
    猫恋一夏阅读 208评论 0 1