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

转载自公众号:趣谈编程

来源:zsx跃迁路

作者:试心

让软件能工作和让软件保持整洁,是截然不同的工作,后者需要投入的更多。

大多数人只能更多地把精力放在让代码能工作,而没办法保持代码有组织更整洁。能做到代码整洁,说明你已经不是一般人了。

本文内容主要分以下几点:

1. 什么样的代码是整洁的

2. 取个好名字

3. 让函数再整洁一点

4.注释的好与坏

5. 格式化

6. 异常处理和边界

7. 整洁的类

1.什么样的代码是整洁的

image

如上图所示,衡量代码质量的唯一标准,是别人阅读你代码时的感受。

不整洁的代码,阅读体验是这样的:

1.乱(组织乱,职责乱,名称乱起)

2.逻辑不清晰(if-else 太多)

3.绕弯子(简单的事写的很复杂)

4.看不懂(只有写的人能理解)

5.难修改(耦合严重,各种写死)

整洁的代码,阅读体验是这样的:

1.清晰(是什么,做了什么,一眼看得出来)

2.简单(职责少,代码少,逻辑少)

3.干净(没有多余的逻辑)

4.好拓展(依赖的比较少,修改不会影响很多)

接下来介绍一些写整洁代码的方法。

2.取个好名字

先看几个坏命名的例子:

image

正如上图所示,坏命名具有这样的特点:

1.使用缩写(让使用者误解其用途)

2.描述性差(通过命名无法理解他的作用)

3.相似(使用类似的、难分辨的名称)

4.使用专业术语做名称容易误会,比如使用 Activity 表达活动,容易被理解成安卓里的组件

5.需要借注释解释,名称本身就是解释,如果还需要借助注释,就已经说明这个命名有问题,对应的类、函数、属性职责不清晰

好的命名具有这样的特点:

1.名副其实

阅读名称就知道它为什么存在做什么事应该怎么用,如果需要通过注释来回答,那就不算名副其实

2.不容易混淆

避免使用非常相似的名称,尤其是类型还相同,比如小写 l 和1、o 和 0、专有名词

3.读的出来

不要因为害怕名称过长而使用缩写,那样不便于和别人讨论

4.方便搜索

名称长度和其作用范围成正比,作用范围比较大的,长名称也可以,只要能表达清楚

3.让函数再整洁一点

1.函数的第一要则:短小 (多短才算可以?不超过 10 行,缩进层级不该大于两层) **

2.只做一件事 (要判断函数是否做了不止一件事,就看它里面的代码,是否能再拆出一个函数

3.函数变大的头号凶手:switch 语句

switch 语句天生要做多件事,我们能做的,就是减少 switch 语句的次数,把它埋藏在较低的抽象层级,同时不重复使用 switch

如果有类似的 switch 出现多次,就要考虑使用多态来减少 switch 语句出现的次数

4.定义的函数的参数越多,你耗费函数使用者的青春就越多,使用者需要花时间搞清楚每个参数的具体含义和顺序

最理想的参数数量是1~2

从测试的角度看,参数越多,可能出现的用例就越多,就越容易出错

保持参数列表短小的方法: 参数升为全局变量多个参数封装成一个类

5.不要有副作用(副作用就是做了名称以外的工作

6.Android Studio 提供了 Refactor Extract ,帮助我们做代码拆分

image

4.注释的好与坏

在这些场景下,使用注释比较好:

1.弥补代码表达意图的失败

代码本身无法说明意图,这时使用注释,说明这段代码需要被修改

2.提供信息

提供代码以外的信息,比如产品相关信息

3.复杂实现的 简要概括

让阅读者快速了解某个复杂的系统

4.警示、提醒

比如某个不起眼的代码是为了解决某个 bug,防止别人误删

5.TODO

IDE可以定位 TODO 注释,我们需要定期查看这些注释,删除不再需要的,让代码整洁

这些注释是坏注释:

1.令人费解的注释

读懂花费的时间比看代码的时间还长,差评

2.误导性注释,老旧的注释

代码才是真相,注释有可能是谎言,还是要”少写注释!“

3.日志型注释

比如记录修改日志,放到 git commit 日志里吧

4.废话注释

变量名、函数名已经很清晰,就不需要注释,注释里不要放一些奇怪的东西,比如如来佛祖

5.注释掉的代码

没用的代码及时删除

别给糟糕的代码写注释,重构!

5.格式化 Coding Style

1.团队最好统一格式化标准

那样就可以避免某人只修改了一点,但顺手格式化了一下,整个类都产生了变动,那样会覆盖真正的提交日志。

2.一行代码列数不超过 100

Android Studio 里的竖线默认是 100,不要超过这条线。

3.代码抽象层级逐渐递减

最顶应该给出高层次概念和算法,向下逐渐展开细节。

4.用好空行

每个空行代表思路的重新开始,用空白行隔开思路和不同作用的代码,和写文章一样,及时分段。

5.物以类聚

关系密切的代码应该靠近。

6.异常处理和边界

1.使用异常替代返回错误码

image

2.抽离错误处理

如果错误处理很重要的话,可以考虑把错误处理单独放到一个方法里。

image

3.尽量不要返回 null

返回空对象好于返回 null,尽可能的避免空指针的出现。

4.慎用 CheckedException

定义异常时,要考虑它会被如何捕获。CheckedException 如果不处理,就得强制抛出去,那样会影响所有调用链。

边界:

1.处理逻辑前,优先处理边界和异常

2.快速了解某个框架的边界

在使用的框架代码里使用关键字 throw new 进行搜索,看看什么情况下会抛出什么异常,最后整理出来。

3.创建边界代码,隔离第三方

使用我们控制不了的代码时,必须加倍小心,确保未来修改的代码不会太大。

创建边界代码,隔离第三方,避免我们的代码对第三方框架内部了解过多。

7.整洁的类

整洁的类应该具有以下特点:

1.职责少,等于短小

评价类职责的多少,看它对外暴露的方法个数,多于 5 个就可以拆分了。

2.只有一条被修改的理由

根据单一职责原则,类应该只有一条被修改的理由。

3.隔离改变

依赖抽象而非具体;减少对外暴露公有变量,使用 getter 代替。

4.拆分不是坏事

有同学可能会担心了:拆分类太多会不会更复杂了?

image

假如你有很多东西,是希望根据分类放放到不同的小抽屉格子里,还是希望一起放到几个大抽屉里?

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

推荐阅读更多精彩内容