编写可读代码的艺术——读后感

第一部分 表面层次的改进

可读性代码的改进从 表面层次 的改进开始:选择好的名字、写好的注释、代码整洁的写成更好的格式。

第二章——把信息装到名字里

无论是命名变量、函数还是类,都有很多相同的原则,尝试把名字当成一个小小的注释语句,选择一个好的名字,让其承载更多的信息。

  • 选择专业的词

    假设你有个Thread类:

    class Thread{
        void Stop();
    };
    

    Stop其实还可以,但是如果该线程不能恢复,使用Kill应该更好一些

  • 找更有表现力的词

    下面列出一些表现力更强的单词,依语境采用:

    send -> deliver 、 dispatch 、 announce 、 distribute 、 route
    find -> search 、 extract 、 locate 、 recover
    start -> lanch 、 create 、 begin 、 open 
    make -> create 、 set up 、 build 、 generate 、 compose 、 add 、 new 
    
  • 用具体的名字代替抽象的名字

    在给变量,函数或者其他元素命名时,要把它描述的更具体而不是更抽象。

  • 为名字附带更多信息

    一个变量名就像是一个小小的注释,有时候我们可以让它更有帮助些

  • 附带其他的重要属性

  • 名字应该有多长

    • 在小的作用域里可以使用短的名字
    • 首字母缩略词和缩写: doc = document
    • 丢掉没用的词
    • 利用名字的格式来传递含义

第三章——不会误解的名字

  • 推荐使用 min 和 max 来表示(包含)极限
  • 推荐使用 first 和 last 来表示包含的范围
  • 推荐使用 begin 和 end 来表示包含/排除范围

第四章——审美

  • 原则:
    • 使用一致的布局,让读者很快就习惯这种风格
    • 让相似的代码看上去相似
    • 把相关的代码行分组,形成代码块

第五章——该写怎样的注释

  • 什么地方不需要这注释
  • 应该记录下来一些想法:为什么代码写成这样而不是那样、TODO、常量为什么是这个值
  • 站在读者的角度去思考:
    • 预料到那部分的代码会让人搞不清楚,加上注释
    • 为读者意料之外的行加上注释
    • 在文件/类的级别使用“全局观”注释来解释所有的部分如何一起工作的

第六章——写出言简意赅的注释

  • 避免使用不明确的代词
  • 尽量精确描述函数的行为
  • 精心挑选输入/输出的例子
  • 声明代码的高层次意图,而非明显的细节
  • 用嵌入注释解释难以理解的函数参数
  • 用含义丰富的词语

第二部分——简化循环和逻辑

第七章——把控制流变得易读

  • 条件语句中参数的顺序:左侧的值倾向于不断变化、右侧的值更倾向于常量
  • if/else 语句块的顺序:首先处理正逻辑而不是负逻辑、先处理简单的情况
  • ?: 表达式:只有在简单的情况下使用
  • 避免 do/while 循环
  • 最小化嵌套
  • 从函数中提前返回

第八章——拆分超长表达式

  • if line.split(':')[0].strip() == "root"改为username = line.split(':')[0].strip();if username == "root"
  • 拆分巨大的语句

第九章——变量与可读性

变量越多,就越难全部跟踪他们的动向
变量的作用越到,就需要跟踪它的动向越久
变量改变的越频繁,就越难以跟踪它的当前值
  • 减少变量,即那些妨碍的变量。通过离开处理结果来消除“中间结果”变量。
  • 减少每个变量的作用域,越小越好。
  • 只写一次的变量更好,那些只设置一次值的变量(或者 const 、final 、常量)使得代码更容易理解。

第三部分——重新组织代码

第十章——抽取不相关的子问题

第十一章——一次只做一件事

应该把代码组织得一次只做一件事情。

第十二章——把想法变成代码

学会用自然语言描述你要实现的功能,写出和描述匹配的代码。

第十三章——少写代码

  • 从项目中消除不必要的功能,不要过度设计
  • 重新考虑需求,解决版本最简单的问题
  • 经常性地通读标准库的整个API,保持对它们的熟悉程度

第四部分——精选话题

第十四章——测试与可读性

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

推荐阅读更多精彩内容

  • 还记得当时在特训营听到的第一句话吗? 代码是给人看的,偶尔在机器上运行一下。 既然代码是给人看的,那么怎样才能让人...
    芝麻香油阅读 867评论 0 2
  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,611评论 0 17
  • 前言 vue源码看了有一段时间了,由于偷懒,一直没有做记录,今天重看,发现很多知识点有些遗忘,果然懒还是不能偷的....
    一二三kkxx阅读 2,106评论 0 4
  • 怎么做迷你小蛋糕呢?这个我知道,先把奶放在一个大盘子里。然后把大盘子放在烤箱里。烤熟了之后拿出来。再把它一...
    静待花开abc阅读 247评论 0 0
  • 本来该昨天发的,玩累了,注册京东,找东西乱七八糟的折腾的心累。。 早上早早地爬起来,骑快五十里地到抱犊寨,一个多小...
    奎志阅读 120评论 0 0