第3章 函数
函数的第一规则是要短小。函数的缩进层级不该多于一层或两层。
函数只做一件事。只做一件事的函数无法再被切分为多个区段。
编写函数是为了把大一些的概念拆分为另一抽象层上的一系列步骤。
换言之,函数应该只在紧邻的两个抽象层次上拆解,而不应该跨越多个抽象层次。
每个函数一个抽象层级。
自顶向下阅读代码:向下规则。
Switch语句天生要做N件事,写出短小的switch语句很难。
switch语句尽量只出现于工厂方法中用于创建多态对象,而且隐藏在某个继承关系中,在系统的其他部分看不到。
长而具有描述性的名称,要比短而令人费解的名称好。
函数参数越少越好。
参数与函数名处在不同的抽象层级,它要求你了解目前并不特别重要的细节。
单参数函数可能是操作该参数,将其转换再输出;也有可能是将参数视为事件(event),有输入而无输出,此时函数使用该参数修改系统状态。
不要使用标识参数,标识参数丑陋不堪,它是在宣布本函数不止做一件事。
如果函数需要三个或以上的参数,就说明其中一些参数应该封装为类了。
一组参数被统统传递,往往就是该有自己名称的某个概念的一部分。
给函数取个好名字,能较好地解释函数的意图,以及参数的顺序和意图。
函数和参数应当形成一种非常良好的动词/名词对形式。
无副作用:函数承诺只做一件事。
应避免使用输出参数,如果必须要修改某种状态,就修改所属对象的对象。
分隔指令与询问
函数要么做什么事,要么回答什么事,但二者不可兼得。
使用异常替代返回错误码:错误处理代码就能从主路径中分离出来,得到简化。
抽离Try/Catch代码块,另外形成函数,分离Control和具体Logic。
函数应该只做一件事,错误处理就是一件事,因此,处理错误的函数不该做其他事。
使用异常代替错误码,新异常就可以从异常类派生出来,无需重新编译或重新部署。
Don’t repeat yourself.
重复可能是软件中一切邪恶的根源。许多原则与实践规则都是为控制与消除重复而创建。
每个系统都是使用某种领域特定语言搭建,而这种语言是程序员设计来描述那个系统的。
函数是语言的动词,类是名词。
编程艺术是且一直就是语言设计的艺术。 大师级程序员把系统当做故事来讲,而不是当做程序来写。
真正的目标在于讲述系统的故事,而你编写的函数必须干净利落地拼装到一起,形成一种精确而清晰的语言,帮助你讲故事。