短小

函数要短小,不超过20行。三四行说清楚最佳。

if 语句、else 语句、while 语句等,其中代码块应该只有一行,就是个函数调用。

只做一件事

函数应该只做一件事。做好这件事。只做这一件事。

每个函数一个抽象层级

函数的语句都在同一个抽象层级上。

Switch 语句

难免会遇到 Switch 语句,让其只做一件事比较困难。

如果要出现,出现在抽象工厂模式底下,用于创建多态对象。

当然要就事论事,偶尔会破坏这条规则。

使用描述性的名称

取个好名字。

函数越短小、功能越集中,就越便于取个好名字。

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

选择描述性的名称能理清你关于模块的设计思路。

命名要保持一致。

函数参数

参数要少。尽量避免三个以上的参数。

惯于通过参数输入数据,通过返回值输出。避免输出参数。

避免向函数传入布尔值。宁愿分成两个函数。

如果函数需要两个、三个或者三个以上的参数,说明其中的一些很有可能需要封装成类了。

无副作用

分隔指令与询问

函数要么做什么事情,要么回答什么事。函数应该修改某对象的状态,或者返回该对象的有关信息。不要二者同时做。

使用异常替代返回错误码

ps: Golang 表示不服。

抽离 Try/Catch 的代码块,另外形成一个函数。

别重复自己

结构化编程

每个函数、函数中的每个代码块都应该只有一个入口、一个出口。

但是对于小函数意义不大。只要函数保持短小,偶尔的 return、break 或者 continue 没有坏处。

避免 goto。

如何写出如上所说的函数

先想写什么就写什么,然后再去打磨。

并不认为一开始就按照规则写函数,没人做的到。