代码整洁之道(2):函数
短小
函数要短小,不超过20行。三四行说清楚最佳。
if 语句、else 语句、while 语句等,其中代码块应该只有一行,就是个函数调用。
只做一件事
函数应该只做一件事。做好这件事。只做这一件事。
每个函数一个抽象层级
函数的语句都在同一个抽象层级上。
Switch 语句
难免会遇到 Switch 语句,让其只做一件事比较困难。
如果要出现,出现在抽象工厂模式底下,用于创建多态对象。
当然要就事论事,偶尔会破坏这条规则。
使用描述性的名称
取个好名字。
函数越短小、功能越集中,就越便于取个好名字。
别害怕长名称。长而具有描述性的名称,要比短而令人费解的名称好。长而具有描述性的名称,要比描述性的长注释好。
选择描述性的名称能理清你关于模块的设计思路。
命名要保持一致。
函数参数
参数要少。尽量避免三个以上的参数。
惯于通过参数输入数据,通过返回值输出。避免输出参数。
避免向函数传入布尔值。宁愿分成两个函数。
如果函数需要两个、三个或者三个以上的参数,说明其中的一些很有可能需要封装成类了。
无副作用
分隔指令与询问
函数要么做什么事情,要么回答什么事。函数应该修改某对象的状态,或者返回该对象的有关信息。不要二者同时做。
使用异常替代返回错误码
ps: Golang 表示不服。
抽离 Try/Catch 的代码块,另外形成一个函数。
别重复自己
结构化编程
每个函数、函数中的每个代码块都应该只有一个入口、一个出口。
但是对于小函数意义不大。只要函数保持短小,偶尔的 return、break 或者 continue 没有坏处。
避免 goto。
如何写出如上所说的函数
先想写什么就写什么,然后再去打磨。
并不认为一开始就按照规则写函数,没人做的到。