代码整洁之道 - 阅读笔记 (二)

#代码整洁之道 - 阅读笔记(二)

第三章 函数

很喜欢第三章的插图:庞大、畸形、混乱,表征不好的函数构造。

好的函数应该具备的特征包括:

  • 短小
  • 只做一件事
  • 每个函数一个抽象层级
  • switch语句
  • 使用描述性名称
  • 函数参数(尽量少)
  • 无副作用
  • 分割指令与询问
  • 使用异常返回替代错误码
  • 别重复自己
  • 结构化编程

先看一段好的函数与不好的函数:

【图片加载不出来,自行看书,见章节:3-0】

这两段代码,很明显就看得出来那段代码是好的。从直观上描述:好的代码就是易懂的。针对于上述几种规则,对个别常见错误进行详细说明。

#3.1 短小

函数的第一规则是要短小。

短小在于:函数包括的行数不能太长,建议不超过20行,每行包括的字符不能太多,建议不超过150个字符。

代码块和缩进

if语句、else语句、while语句等,其中的代码块应该只有一行。该行大抵应该是一个函数调用语句。这样不但能保持函数短小,而且因为块内调用的函数拥有较具说明性的名称,从而增加了文档上的价值。

这也意味着函数不应该达到足以容纳嵌套结构。所以,函数的缩进层级不应该多于一层或两层。这样的函数才更加易于阅读和理解。

#3.2 只做一件事

根据缩写的代码,完成具体的单个业务模块,不要嵌套!!!

#3.3 每个函数一个抽象层级

要确保函数只做一件事,函数中的语句都要在同一抽象层级上。混杂不同抽象层级,往往让人迷惑。可能无法判断某个表达式是基础概念还是细节。更恶劣的是,细节与基础概念混杂。

自顶向下读代码,向下规则:想要代码拥有自顶向下的阅读顺序。我们想要让每个函数后面都跟着位于下一抽象层级的函数,这样一来,在查看函数列表时,就能循抽象层级向下阅读了。如:

代码整洁之道 - 阅读笔记 (二)

#3.6 函数参数

最理想的参数数量是0,其次是1,再次是2。参数传递时,具有太多的概念性,每次都要翻译一遍,不易于理解。从测试角度看,参数越多,编写确保参数的各种组合运行正常的测试用例,是很浑南的事情。

##3.6.1 一元函数的普遍形式

向函数传递单个参数的两种普遍理由:(一)问关于那个参数的问题;(二)函数是一个事件,利用该参数修改系统状态。

第一种理由:问关于那个参数的问题,操作该参数,将其转换为其他什么东西,要在一致的上下文使用这两种形式。

第二种理由:程序将函数作为是一个事件,使用该参数修改系统状态,小心使用这种形式,应该让读者很清楚地了解他是个事件,谨慎的选用名称和上下文。

##3.6.2 标识参数

标识参数不应该传入,将true和false作为参数传入函数。

##3.6.3 二元函数

二元函数的业务意义要很清楚。

##3.6.5 参数对象

如果函数看来需要两个、三个或以上的额参数,就说明其中一些参数应该封装为类了。

从参数创建对象,从而减少参数数量,看起来想作弊,但实则并非如此。当一组参数被共同传递,往往就是该有自己名称的某个概念的一部分。

##3.9 使用异常替代返回错误码

从指令式函数返回错误码轻微违反了指令与询问分割的规则,鼓励了再if语句判断中把志玲当做表达式使用。

代码整洁之道 - 阅读笔记 (二)

错误示例为:

代码整洁之道 - 阅读笔记 (二)

代码整洁之道 - 阅读笔记 (二)

正确示例为:

代码整洁之道 - 阅读笔记 (二)

使代码更加简化,且易于理解。

额(⊙o⊙)…,想要写出好的函数,要写,复看,复检,再复检。