Litong's Blog

Work to become, not to acquire.

第3章 函数

函数的第一规则是要短小。函数的缩进层级不该多于一层或两层。

函数只做一件事。只做一件事的函数无法再被切分为多个区段。

编写函数是为了把大一些的概念拆分为另一抽象层上的一系列步骤。
换言之,函数应该只在紧邻的两个抽象层次上拆解,而不应该跨越多个抽象层次。

每个函数一个抽象层级。

自顶向下阅读代码:向下规则。

Switch语句天生要做N件事,写出短小的switch语句很难。

switch语句尽量只出现于工厂方法中用于创建多态对象,而且隐藏在某个继承关系中,在系统的其他部分看不到。

长而具有描述性的名称,要比短而令人费解的名称好。

函数参数越少越好。

参数与函数名处在不同的抽象层级,它要求你了解目前并不特别重要的细节。

单参数函数可能是操作该参数,将其转换再输出;也有可能是将参数视为事件(event),有输入而无输出,此时函数使用该参数修改系统状态。

不要使用标识参数,标识参数丑陋不堪,它是在宣布本函数不止做一件事。

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

一组参数被统统传递,往往就是该有自己名称的某个概念的一部分。

给函数取个好名字,能较好地解释函数的意图,以及参数的顺序和意图。

函数和参数应当形成一种非常良好的动词/名词对形式。

无副作用:函数承诺只做一件事。

应避免使用输出参数,如果必须要修改某种状态,就修改所属对象的对象。

分隔指令与询问

函数要么做什么事,要么回答什么事,但二者不可兼得。

使用异常替代返回错误码:错误处理代码就能从主路径中分离出来,得到简化。

抽离Try/Catch代码块,另外形成函数,分离Control和具体Logic。

函数应该只做一件事,错误处理就是一件事,因此,处理错误的函数不该做其他事。

使用异常代替错误码,新异常就可以从异常类派生出来,无需重新编译或重新部署。

Don’t repeat yourself.

重复可能是软件中一切邪恶的根源。许多原则与实践规则都是为控制与消除重复而创建。

每个系统都是使用某种领域特定语言搭建,而这种语言是程序员设计来描述那个系统的。

函数是语言的动词,类是名词。

编程艺术是且一直就是语言设计的艺术。 大师级程序员把系统当做故事来讲,而不是当做程序来写。

真正的目标在于讲述系统的故事,而你编写的函数必须干净利落地拼装到一起,形成一种精确而清晰的语言,帮助你讲故事。