《代码整洁之道》 [(美国)马丁] ——(读书笔记)

代码整洁之道

第二章:做有意义的命名 —(2017-08-03日)

  • 1.名副其实:选个好的命名,见名知意,变量,或函数,或类冯名称应该在看到名称就已经有了答案,如果名称需要注释来补充,那就不算是名副其实.
  • 2.避免误导:避免留下和代码本意不符合的单词
  • 3.做有意义的区分:有时候代码名称虽然不同,但是名称高含义确实相同的,这就导致程序员在看到命名时无法进行区别.
  • 4.使用命名时,尽量使用我们能读出来的单词,避免与人交谈时产生单词读不出来的尴尬,书中说,编程本来就是一种社会活动
  • 5.使用可搜索的名称:平常的单词名称和数字很难在代码中找出来,因为肯定会不引用.长命胜于短名称,但是如果短名称足够清楚,就要爱比长命称好,若变量或常亮可能在代码多处使用,应该给其的命名,便于搜索.
  • 6.避免使用编码,避免使用前缀,在避必须使用编码的特殊情况时,在接口和实现命名时,尽量选择对实现进行编码命名.
  • 7类名:类名和对象名应该是名词或者名词短语,类名不应该是动词.
  • 8.方法名:方法名应该是动词或动词短语.
  • 9:命名时做到言到意到,意到言到.
  • 10.每个概念对应一个词,我们在写代码时,应当给每个抽象概念对应一个词,并且一以贯之.
  • 11.尽量使用程序员熟悉的术语来命名,如果实在不能用术语命名,就采用所涉及领域名称来命名.

第三章:函数

3.1-3.7节(2017-08-04日)
  • 1.函数就应该写的短小,函数应该二十行封顶.这样最佳.if 或者else或者while语句,其中的代码块应该只有一行,该行应该是一个函数调用.这样不但可以保持函数短小,还可以使用具有说明性的文字,使得代码更易于阅读和理解
  • 2.只做一件事,函数应该做一件事,做好这件事,只做这一件事.判断函数是否不止做了一件事,就是看这个函数还能否拆分出一个函数.因为只做一件事的函数无法呗被合理的切分为多个区域.
  • 3.函数中的语句都要在同一抽象层级上,自顶向下读代码,让每一个函数后面都跟着位于下一抽象层级 的函数.
  • 4.用描述性的名称,当我们命名函数时,要让函数名较好的描述函数做的事.函数越短,功能越集中,就越便于取个好名字.不要害怕名字长,因为具有描述性的长名字要比令人费解的短名称好,也要比描述性的长注释好,选择描述性的名称能清理自己关于模块的设计思路,并帮改进之.而且命名方式应该保持一致.
  • 5.函数的参数:最理想的函数时是没有参数的,其次时是一个参数,然后是两个参数,避免使用三个或者三个以上的参数,切记,不到万不得已的时候不要这样做.
3.8-3.15节(2017-08-05日)
  • 6.给函数取个好名字,能较好的解释函数的意图,以及参数的顺序和意图,对于一元函数和参数,应当形成一种良好的动词/名词对应行式.
  • 7.应避免使用输出参数,如果函数必须要修改某种状态,就修改所属对象的状态.
  • 8.函数要么是在做一件什么事,要么是回答什么事,一般二者不可兼得,函数应该修改某对象的状态,或者是返回该对象的有关信息,两者不要都干,否则会导致混乱.
  • 9.抽离try/catch代码块,将主体抽离出来形成函数.处理错误就是一件事,处理错误的函数也只能做一件事.
  • 10.重复代码是软件中一切邪恶的根源,重复代码会增加代码的臃肿,而且会增多代码的错误率,许多原则与实践规则都是为控制与消除重复而创建.
  • 11.没有人能从一开始就能写出规整的代码,所以在写代码时,先写出来,再根据书中的方法,打磨,分解函数,修改名称,消除重复

第四章:注释(2017-08-06日)

  • 1.如果编程语言足够有表达能力,或许我们擅长于用这门需要来表达意图,那么就不需要注释了.
  • 2.为什么不建议使用注释,因为代码总是在改变,在演化,但是注释却不能总是随之变动.
  • 3.注释不能美化糟糕的代码,当你需要用注释来解释你糟糕的代码时,倒不如花点时间清洁清洁自己糟糕的代码.
  • 4.很多时候,其实当我们来写代码时,只需要想上那么几秒钟,就能用代码解释自己的大部分意图,只需要描述一个与注释所言同一事物的函数即可.
  • 5.什么是好的注释,法律信息的注释,例如有时候公司规范要求,编写与法律有关的注释.提供信息的注释.公共api中的javadoc
  • 6.能用函数或变量时就别用注释.而且在括号后面编写注释时,会给我们编写短小代码和封装代码带来混乱.
  • 7.归属和署名,因为源代码控制系统非常善于记住是谁在在何时添加了什么,所以没有必要用小小的标签名.
  • 8.不要直接把代码注释掉,要么用,要么删掉,这样的代码别人看到会以为是重要的,不会删掉,这样越来越多注释代码积累会弄脏我们的代码.

第五章:格式(2017-08-08日)

  • 1.我们应该选用一套管理代码格式的简单规则,贯彻这套规则,在团队中应该一致同意,采用一套简单的格式规则,所有成员都去遵从.
  • 2.格式目的:代码格式很重要,代码格式不可忽略,必须严肃对待,代码格式关乎团队沟通,而沟通是专业开发者的头等大事.
  • 3.写出来的代码要像报纸上的文章一样,名称应当简单且一目了然.名称本身应该足够告诉我们是否在正确的模块中.
  • 4.在封包声明,导入声明,和每个函数之间,都有空白行隔开,这条极简单的规则,极大的影响了代码的视觉外观.每个空白行都是一条线索,标识出新的独立的概念.
  • 5.而紧密相关的代码应该互相靠近,不应该被注释隔断代码间的联系.
  • 6.关系密切的代码就应该相互靠近,但我们经常遇到存在于不同文件的概念,不到万不得已,应该尽可能的把有密切相关的函数放在相同的文件.
  • 7.变量的声明.应该尽可能的靠近其使用的位置.实体变量,应该在类的顶部声明至少在java代码中应该这样.
  • 8.相关函数,如果某个函数调用了别的函数,就应该将其放在一起,并且调用者在被调用者上面.这样就极大增加了模块的可读性.
  • 9.空格字符,我们在赋值操作符周围加上空格字符,以此达到强调的目的.
  • 10.团队规则,每个人都有自己的代码格式规则,但是在团队中,应当认同同一种风格,并且每个人都去采用这种风格.

第六章:对象和数据结构(2017-08-09日)

  • 1.隐藏实现并非只是在变量之间放上一个函数层那么简单,隐藏实现关乎抽象,类并不是简单的取值器和赋值器,而是曝露抽象接口,以便用户无需了解数据的实现,就能操作数据本体.
  • 2.对象把数据隐藏于抽象之后,曝露操作数据的函数.数据结构曝露其数据,没有提供有意义的函数.
  • 3.过程式代码既使用数据结构的代码,难以添加新的数据结构,因为要修改所有的函数,而面向对象的代码难以添加新的函数,因为必须修改所有类.
  • 4.得墨忒耳律:模块不应该了解它所操作对象的内部情形.
  • 5.方法不应该调用由任何函数返回的对象的方法.这类方式的代码应该杜绝.
  • 6.最精炼的数据结构,是一个只有公共变量,没有函数的类.这种数据结构有时被称为数据传递对象[DTD].
  • 7.对象曝露行为,隐藏数据,便于添加新对象类型,而无需修改既有行为,同时也难以在既有对象中添加新行为.
  • 8.数据结构曝露数据,没有明显的行为,便于向既有的数据结构添加新的行为,同时也难以向既有函数添加新数据结构.

第七章:错误处理(2017-08-11日)

  • 1.遇到错误时,应该抛出一个异常,这样的调用代码会很整洁,其逻辑不会被错误代码弄乱.
  • 2.先写try-catch-Finally语句,当我们执行try中的代码时,表明可以随时取消执行,并且在catch中继续.
  • 3.给出异常发生的环境说明,每次抛出异常,都行该提供足够的环境说明,以便判断错误的来源和出处.
  • 4.当我们在应用程序中定义异常类时,最重要的是考虑它们如何被捕获.
  • 5.别返回null,因为当你返回null时基本上就是给自己添加工作量,给调用者添乱.如果你打算在方法中返回null,不如抛出异常,或者是返回特例对象.
  • 6.不要传null值,除非是API要求null否则就不要给函数中传入null值.
  • 7.我们在代码中应该将错误处理隔离看待,独立于主要的逻辑代码,这样就能写出强固而整洁的代码.也极大的提升了代码可维护性.

第八章:边界(2017-08-12日)

  • 1.一般来说,第三方程序包和框架提供者追求普适性,而我们这样的使用者则要满足特定需求的接口即可,这>- 种张力会导致系统边界上出现问题.
  • 2.学习性测试毫无成本,无论如何我们都要学习要使用的api而编写测试则是获取这些知识的容易而不会影响其他工作途径.
  • 3.代码中的边界是将已知和未知分隔开的边界.在代码中总有许多地方是我们的知识未及之处.

第九章:单元测试(2017-08-14日)

  • 1.TDD三定律:
    a.在编写不能通过的单元测试前,不可编写生产代码。
    b.只可编写刚好无法通过的单元测试,不能编译也不算通过。
    c.可编写刚好足以通过通过测试当前失败测试生产代码。
  • 2.保持测试代码整洁,测试代码和生产代码一样重要。它需要被思考,被设计和被照料,它该像生产代码一样整洁。
  • 3.如果测试不能保持整洁,你将会失去它们。没有了测试,你就会失去保证生产代码可扩展的一切要素。
  • 4.测试代码应该要有可读性。应该和其他代码一样,明确,简洁,还有足够的表达力。
  • 5.按照 构造-操作-检验 模式,可以清晰的将测试拆分为三个环节。第一个环节构造测试数据,第二环节操作数据,第三部分检验操作是否得到期望的结果。
  • 6.整洁的代码还要遵循以下规则。快速,独立,可重复,足以验证,及时。

第十章:类(2017-08-16日)

  • 1.类的组织:类中应该由一组变量列表开始,公共静态常量在前,私有静态变量在后,然后时私有实体变量,接着是公共变量。公共函数跟在变量列表之后。工具函数在公共函数之后。
  • 2.类应该短小,但是类的大小不取决于代码行数,而取决于权责。
  • 3.单一权责原则认为,类或模块应该由且只有一条加以修饰的理由。
  • 4.系统应该由许多短小的类而不是少量巨大的类组成。每个小类封装一个权责,只有一个修改的原因。并与少数其他类一起协同达到期望的系统行为。
  • 5.保持函数和参数列表短小的策略,有时会导致为一组子集方法所用的实体变量数量增加。出现这种情况应该尝试将这些变量和方法拆分到两个或多个类中,让新的类更内聚。
  • 6.保持内聚性就会得到许多短小的类。

第十一章:系统

待读。。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,587评论 18 139
  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,597评论 0 17
  • 目录及笔记链接 序 丹麦谚语:小处诚实非小事。 建筑师路德维希:神在细节之中。 日本的 5S 哲学: 整理(整理、...
    小镭Ra阅读 1,495评论 3 3
  • “相对于任何宏伟景愿,对细节的关注甚至是更为关键的专业性基础。首先,开发者通过小型实践获得可用于大型实践的技能和信...
    寻海阅读 4,704评论 1 27
  • 今天的常德,曾经的名字在中国几乎家喻户晓:武陵。桃花源就是被迷路的武陵渔人发现后,又经过陶渊明的描写,才成了中国人...
    穆平阅读 577评论 1 2