3.函数
函数的第一规则是要短小(代码行数少)。第二条规则是还要更短小。
函数不应该达到足够容纳嵌套结构。所以,函数的缩进层级不该多于一层或两层。
函数应该做一件事。做好这件事。只做这一件事。
判断函数是否不止做了一件事,还有一个方法,就是看是否能再拆出一个函数,该函数不仅只是单纯地重新诠释其实现。
尽力确保switch结构埋藏在较低的抽象层级切永不重复。比如利用多态达到这个目的。
别害怕长名称。长而具有描述性的好名称,要比短而令人费解的名称好。长而具有描述性的名称,要比描述性的长注释好。
最理想的参数是零(零参数的函数),其次是一,再次是二,尽量避免三。有足够特殊的理由才能用三个以上参数——所以无论如何也不要这么做。
参数不易对付。他们带有太多概念性。
参数与函数名处在不同的抽象层级,它要求你了解目前并不特别重要的细节。
普遍而言,应避免使用输出参数。如果函数必须要修改某种状态,就修改所属对象的状态吧。
函数要么做什么事,要么回答什么事,但二者不可得兼。函数应该修改某对象的状态,或是返回该对象的有关信息。两样都干常会导致混乱。
try/catch代码丑陋不堪。他们搞乱了代码结构,把错误处理与正常流程混为一谈。最好把try和catch代码块的主体部分抽离出来,另外形成函数。
函数只应该做一件事。错误处理就是一件事。因此,处理错误的函数不应该做其他事。
使用异常替代错误码,新异常就可以从异常类派生出来,无需重新编译或重新部署。
大师级程序员把系统当做故事来讲,而不是当做程序来写。
提要
- 短小
- 只做一件事
- 每个函数一个抽象层级
- switch语句
- 使用描述性的名称
- 函数参数
- 一元函数的普遍形式
- 标识参数
- 二元函数
- 三元函数
- 参数对象
- 参数列表
- 动词与关键词
- 无副作用
- 分隔指令与询问
- 使用异常替代返回错误码
- 抽离try/catch代码块
- 错误处理就是一件事
- error.java依赖磁铁
- 别重复自己
- 结构化编程
- 如何写出这样的函数