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

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

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

  1. 什么样的代码是整洁的
  2. 取个好名字
  3. 让函数再整洁一点
  4. 注释的好与坏
  5. 格式化
  6. 异常处理和边界
  7. 整洁的类

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

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

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

    1.乱(组织乱,职责乱,名称乱起)
    2.逻辑不清晰(if-else 太多)
    3.绕弯子(简单的事写的很复杂)
    4.看不懂(只有写的人能理解)
    5.难修改(耦合严重,各种写死)

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

    1.清晰(是什么,做了什么,一眼看得出来)
    2.简单(职责少,代码少,逻辑少)
    3.干净(没有多余的逻辑)
    4.好拓展(依赖的比较少,修改不会影响很多)

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

2.取个好名字

先看几个坏命名的例子:

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

    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 ,帮助我们做代码拆分

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.使用异常替代返回错误码

    2.抽离错误处理

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

    3.尽量不要返回 null

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

    4.慎用 CheckedException

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

边界:
    1.处理逻辑前,优先处理边界和异常
    2.快速了解某个框架的边界

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

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

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

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

 

7.整洁的类

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

    1.职责少,等于短小

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

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

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

    3.隔离改变
依赖抽象而非具体;减少对外暴露公有变量,使用 getter 代替。
    4.拆分不是坏事

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

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


推荐阅读

回顾我这一年多的提交日志

跳槽需要内推?这里有一大波机会

当产品经理在群里艾特你有 bug...

5分钟了解《代码整洁之道》精华相关推荐

  1. 代码整洁之道精华——第十四章 逐步改进

    阅读本文有两种原因:第一,你是个程序员:第二,你想成为更好的程序员.你如果想成为更好的程序员,那就请细细品味文章内容,它绝不会让你失望. 代码整洁之道教给大家如何编写整洁的代码,而不仅仅是能运行的代码 ...

  2. 代码整洁之道精华——序言

    阅读本文有两种原因:第一,你是个程序员:第二,你想成为更好的程序员.你如果想成为更好的程序员,那就请细细品味文章内容,它绝不会让你失望. 代码整洁之道教给大家如何编写整洁的代码,而不仅仅是能运行的代码 ...

  3. 《代码整洁之道》(Clean Code)- 读书笔记

    一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...

  4. 代码整洁之道(一)最佳实践小结

    摘要: Any fool can write code that a computer can understand. Good programmers write code that humans ...

  5. 代码整洁之道(Clean Code)- 读书笔记

    Sorry, 许久未更新文章了,主要因为刚刚换了一家新公司,忙于组建团队(建设.招聘.流程.框架等)与熟悉公司业务,还有领导给的其他工作等等,实在是没有时间更新了.最近在和团队分享Bob大叔的< ...

  6. 代码整洁之道(一)最佳实践小结 1

    摘要: Any fool can write code that a computer can understand. Good programmers write code that humans ...

  7. 代码整洁之道 读后感

    代码整洁之道 读后感 The Clean Coder -- A code of Conduct for Professional Programmers 读后感 看完这本书的感受是,这本书和标题的 & ...

  8. 《代码整洁之道》读书笔记✍ 教你写 clean code

    代码整洁之道 第一章 整洁代码 1.1 什么是整洁的代码? 资深程序员告诉你什么是整洁的代码,下面详细介绍了Bjarne Stroustrup的描述,其他描述就不一一列出了,在此只记录几个关键点. 我 ...

  9. 代码整洁之道:程序员的职业素养 读书笔记

    代码整洁之道:程序员的职业素养 作者:(美)罗伯特 C. 马丁(Robert C. Martin) 译者:余晟,章显洲 这是一本风趣幽默的关于程序员的故事书,这本书让我在专业技术之外,了解了更多程序员 ...

  10. 《代码整洁之道 - 程序员的职业素养》读书笔记

    一 前言   <代码整洁之道 - 程序员的职业素养>的作者是Robert C. Martin,大家喜欢喊他Bob大叔.这本书主要是Bob大叔40年编程生涯的心得体会,主要讲述了一个专业的程 ...

最新文章

  1. php顺序、二分查找
  2. golang重复声明变量
  3. Dubbo源码分析(三)Dubbo中的SPI和自适应扩展机制
  4. mysql占位符 防注入_php mysql中防注入的几个小问题,麻烦大大帮我解答谢谢
  5. Angular 2 Decorators - 1
  6. 如何使编译的EXE程序能多个运行?
  7. python就业方向-Python的5大就业方向,薪资诱人前景好!
  8. vue可缓存的单页面多标签页
  9. 机器学习原理与实践(开源图书)-总目录
  10. 如何设置csdn为谷歌浏览器默认搜索引擎
  11. Python金融系列第七篇:市场风险
  12. python基础资料(Learn|Codecademy好用的工具)
  13. [回溯系列] 组合总和+电话号码(day25)
  14. 企查查访问超频怎么办_Springboot与Selenium合体变蜘蛛爬企查查
  15. 如何清除DNS污染?
  16. 下载 JDK LTS 版本安装
  17. 138.深度学习分布式计算框架-1
  18. 模拟卷Leetcode【普通】049. 字母异位词分组
  19. Tensorflow-GPU环境配置
  20. 人事档案管理系统功能建设分享之博奥智源公司

热门文章

  1. iOS应用中增加emoji表情输入功能
  2. java excel 插入新行_excel:插入行更新公式
  3. mysql候选关键字_MySQL(三)之SQL语句分类、基本操作、三大范式
  4. HTTPS学习笔记:(3)一文彻底了解PKI与证书
  5. 看了一遍蝴蝶效应1,在看到了一篇很好的《蝴蝶效应1》影评
  6. 让你的努力配得上你的梦想书摘
  7. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第10章 分析句子的意思
  8. 微信小程序不能直接加载本地静态图像作为背景的解决办法
  9. 图片如何添加水印文字?如何设置照片水印?
  10. 【luogu P5055】【模板】可持久化文艺平衡树