《代码整洁之道》读书笔记

第1章 有意义的命名

  • 废话是另一种没意义的区分
    Info,Data就像a,an,the意义,是意义含混的废话
    Product——ProductInfo——ProductData
    Money——MoneyAccount
    CustomInfo——Customer
    AccountData——Account
    TheMessage——Message
    NameString
    CustomerObject

第3章 函数

  • 标识参数
    标识参数丑陋不堪。reander(Boolean isSuite)应该改为reanderForSuite和reanderForSingleTest

  • 将二元函数转化为一元函数(应该尽量减少或者消灭参数)
    二元函数一般比一元函数难以理解,可以通过下面的手法进行转化:

  1. 在类中将其中一个参数用字段表示,就不用传参了。
  2. 也可以将方法作为其中一个参数的方法,这种手法实际上是将函数(包括参数)的参数向上提到类中去。
  • 将参数编码到函数名称
    writeField(name)比write(name)好,因为前者告诉了我们name是一个field
    assertExpectedEqualActual(expected, actual)比assertEqual好一些,这大大减轻了记忆参数顺序的负担。

  • 无副作用
    函数应该只做一件事,但是还是可能会做其他预料之外的事情。

  • 参数应该只用作输入
    appendFooter(s)会让人疑惑,这个函数是将s添加到某个什么东西后面?还是他把什么东西添加到s后面?s是输入参数还是输出参数?我们得稍微看下函数签名才能知道。

public void appendFooter(StringBuffer report)

面向对象中对输出参数的大部分需求以及小时了,因为 this也有输出参数的意味在内,最好是下面这样调用:
report.appendFooter

  • 分隔指令与询问
    只做一件事。函数要么做什么事,要么回答什么事,但二者不可兼得。不然会引起一些混乱,因为做什么事和回答什么事组合在一起,可能引起多种猜测。

  • 使用异常代替错误码
    可以看到前者不会那么混乱,流程比较正常,跟平常的代码一样



  • 错误处理就是一件事

void func(){
  try{
    XXX;
  }catch{
    YYY;
  }
}

第4章 注释

  • 注释很烂
    只有在表达失败的时候才需要注释;程序员不能维护注释,只有代码能忠实地告诉你它做的事

  • 函数名或者变量名都可以起到注释的作用

第5章 格式

  • 垂直距离
    若某个函数调用了另外一个,就应该把它们放在一起,而且调用者应该尽可能放在被调用者上面。

  • 为什么调用者要放到上面?
    我们指望最重要的概念先出来,细节在后面,查看前面的函数可能就知道了代码的意图。

  • 概念相关
    概念相关的代码应该放到一起。

  • 水平方向上的区隔与靠近
    我们使用空格字符将彼此紧密相关的事务连接到一起,也用空格字符把习惯性较弱的事物分隔开。
    赋值语句的左边和右边用空格隔开

第6章 对象和数据结构

  • 数据抽象
    隐藏实现并非只是在变量之间放上一个函数层那么简单。隐藏实现关乎抽象!用户无需了解数据的实现就能操作数据本体。

  • 数据、对象的反对称性
    这小节说的是过程式代码和面向对象代码的区别:
    过程式代码就像集体主义,面向对象代码就像个人主义。
    过程式代码函数书写的时候,操作全体数据(结构体),手把手,集体进行书写。如果添加多一个对象,那么所有函数都需要重新书写。
    面向对象代码函数书写的时候,尽量让全体数据(对象)操作自己(对象.方法()),添加多一个数据(类),那么所有函数不需要重新书写,因为有多态。
    过程式代码:方便添加函数,不方便添加数据。
    面向对象代码:方便添加数据,不方便添加函数。

  • 德墨忒耳律
    方法不应调用由任何函数返回的对象的方法,换而言之,只跟朋友谈话,不与陌生人(朋友的朋友)谈话。因为这样暴露了类的内部结构。书中举了这样的例子:final String outputDir = ctxt.getOptions().getScratchDir()...
    我们取得这些内部结构,往往是为了用他们去做一些事情。类可以做的这些事情作为方法放在类的内部,这样外部也就不用去获取类的内部结构。

第7章 错误处理

  • 别返回null值
    返回一个null对象,在其中定义特殊情况的处理,这样程序中就不会有很多null判断的嵌套语句。

第17章 味道与启发
G8:信息过多
通过限制信息来控制耦合度

G18:不恰当的静态方法
非静态方法有一个好处就是可以实现多态。

G27:结构甚于约定
多态代替switch的时候,每次派生类都需要实现基类的功能,但是switch分支却没有这样的要求,特别是如果有多个switch,也就是多个抽象方法的时候,这样的结构更加使人不会犯错,少写一些代码。

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

推荐阅读更多精彩内容