《代码整洁之道》- 小结 / we are Code Monkey

一群猴子在森林上窜下跳,抓着几个酸桃子,得意洋洋的坐在树上,确对自己造成的混乱熟视无睹。

一 序


没错,我们就是这么一群(Code)代码(Monkey)猴子。当我们在编写出“可以运行”的程序后,我们便得意洋洋的进入下一个任务,任由这些程序在我们眼皮底下腐烂,造成混乱。

Code Monkey

对于自己造成的混乱迟早都要付出高昂的代价去修复,与其这样,我们还不如在编码的时候就编写“干净的代码”。对于这些“干净的代码”,我们可以遵循软件开发中的5S原则:

  • 整理:命名的规范
  • 整顿:把你的代码放在它应该在的地方
  • 清楚:整洁代码
  • 清洁:代码风格、实践手段
  • 身美:不断改进

所有的原则都是为了遵循 “童子军军规” —— 让营地比你来的时候更整洁

二 整洁的代码


整洁的代码没有固定的标准,但有大体上的原则来规范代码(代码在我们离开时要比发现时更整洁):

  • 可以让阅读代码的人感到愉悦 —— 可读性
  • 代码的质量
  • 好的命名
  • 只做一件事
  • 减少依赖关系
  • 可以通过所有测试
  • 没有重复代码
  • 包括少量的实体

三 有意义的命名


一个好的命名并不一定是一开始就写好的,它是不断被更好的名称所替代的。一个好的命名遵循下列的规范:

  • 名副其实:不需要被注释也应该被理解、看懂。一个名副其实的命名可以告诉读者:
  • 怎么用
  • 做什么事
  • 为什么存在
  • 避免误导:(I 、O),这到底是 I 还是 1,是 O 还是 0;(傻傻分不清)
  • 做有意义的区分:
  • 不要使用 a1 a2 a3
  • 不要说废话(student 就不要再写成 studentInfo / studentData 了)
  • 使用读得出来的名称:你应该不想让你的小伙伴一个方法名一个字母一个字母的读出来吧
  • 使用可搜索的名称:不要使用硬编码,尽量使用常量替代
  • 一致的命名规则:比如查找都用 find*
  • 不要使用双关语

四 函数


还记得你曾经写过的几百行代码的函数嘛,现在在回去看看


所以写出一手干净的函数/方法代码是非常重要的,这关系到你写完代码之后会被多人(xian)“夸”(qi)的问题,对于整洁的函数:

  • 短小:
  • 20 行以内,不能再多了
  • if / else /while 代码块理应只该有一行代码
  • 每个函数/方法只干一件事(同一层级)
  • 使用描述性的名称
  • 函数参数:
  • 一元参数:有输入应该也有输出
  • 二元参数:尽量不要使用,除非参数是有序组成的(new Point(x,y))
  • 三元+参数:封装成类在传过去吧
  • 标识参数:不要传过来,这是在违反一个函数/方法只干一件事的原则
  • 使用异常替代返回码
  • 抽离 try-catch
  • 别重复自己

五 注释


回想当初,年轻的我们还在比看谁写的注释多,注释多的更好。现在再看看当初写的代码,这是哪个程(da)序(sha)员(bi)写的注释,多久没维护了都。现在回过头想想,当初写注释的目的是为了让读者更好的了解该函数的意义,而事实上,真正好的注释就是想办法不去写注释,一切尽在函数名称上。除了好的注释,其它的都是不(la)好(ji)的注释:

  • 法律信息
  • 提供信息的注释(时间格式...)
  • 对意图的解释
  • 警告
  • TODO
  • 公共 API

六 格式的目的


格式的最大好处就是可以提高可读性,方便维护和拓展。代码的格式可以分为:

垂直格式

  • 概念间垂直方向上的间隔(空一行)
  • 垂直方向上的靠近(紧密联系的代码放在一起,不要隔开)
  • 垂直距离
  • 变量声明:靠近其使用位置
  • 实体变量:类的顶部
  • 相关函数:调用者放在被调用者的上方(靠近)

横向格式

  • 根据是否紧密相关进行:
  • 隔离(等号两边加空格)
  • 靠近:(乘号两边不加空格)
  • 空范围:将; 换行
while(...)
;

七 对象和数据结构


数据抽象应该尽可能的以抽象的形态表述数据,避免暴露过多的细节。
墨忒耳律(The Law of Demeter):每个单元/对象/方法应当对其它单元只拥有有限的了解。

在对象 O 的 M 方法中,只应该访问:

  • 对象 O 本身
  • M 方法的参数
  • M 方法中创建或实例化的对象
  • 对象 O 直接的组件对象
  • 在 O 的范围内可被全局访问的全局变量

八 单元测试


TDD 三定律

  • 在编写不能通过的单元测试之前,不可编写生产代码
  • 只可编写刚好无法通过的单元测试,不能编译也算不通过
  • 只可编写刚好足以通过当前代码的生产代码

整洁的测试可读性(构造、测试、校验)一定是非常高的,在单元测试中一般将相关联的语句和断言放在一起。整洁的测试遵循 F.I.R.S.T. 规则:

  • 快速
  • 独立:测试之间不该有相互依赖
  • 可重复:任何环境下都能跑
  • 自足验证
  • 及时:测试代码先于生产代码编写

九 类


函数应该足够短小,类也应该足够短小。且类应该

  • 遵守单一权责原则:一个类应该只有一个加以修改的理由(一个抽屉只放同一类物品)
  • 保持高内聚:类中应该只有少量的实体变量,且类中的每个方法都应该操作该实体

看完《代码整洁之道》不禁感叹,代码原来应该这么写,自己原来写的代码真的是太(T)难(M)看(chou)了。但是感觉还不够,还应该有更多的整洁之道,在看《重构》的时候希望能有更大的启发。

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

推荐阅读更多精彩内容