代码简洁之道笔记2 --函数

二.函数

1.短小 --函数的第一规则就是短小,这意味着函数不应该大到足以容纳嵌套结构,所以函数缩进不应该多于两层。这样易于理解。

2.只做一件事 --函数应该只做一件事,做好这件事,只做这一件事。

3.每个函数一个抽象层级 --要确保函数只做一件事,函数中的语句都要在同一抽象层级上。

4.swith语句  --swith语句天生要做N件事,不过最好把他藏在较低的抽象层级,而且永不重复。

5.使用描述性的名称 --函数越短小,功能越集中越容易取好名字,长而有意义的名字比短而令人费解的名字好的多。(参见上章有意义的命名)

6.函数参数

①一元函数两种普遍形势  --尽量满足这两种形式,因为这是读者期待看到的,尽量不要用输出参数

   ⑴关于那个参数的问题,比如boolen is_fileExists("myfile")

   ⑵操作该参数 InputStream fileOpen("myfile")

②标识参数  --标识参数丑陋不堪。向函数传入布尔值简直骇人听闻。这无疑是大声宣布该函数做得不只一件事,应该尽量避免

③二元函数 --参数越多越难理解,当然有些符合逻辑的函数,参数量是恰当的,比如new point(1,1),因为逻辑内聚,所以反而不会有理解难度,除此之外应该尽量把二元函数改为一元的。

④三元以上函数 --三元以上函数比二元函数难懂得多,慎用。

⑤参数对象 --如果函数看起来需要两个、三个或三个以上参数,就说明其中一些参数应该封装为类了。

⑥参数列表 --可变参数的函数像List的单个参数,最好不应该超过三元。

⑦动词与关键字 --函数与参数应当形成一种非常良好的动词名词形式例如:wirteField(name),即说明了意图又说明了name是Field,使用这种形式把参数名词编码进函数名中,可以减低记忆负担与消除模糊。

7.无负作用 --函数通常只做一件事,但是因为一些原因与其他部分耦合,有可能做了预料之外的事情,此时应该直接在函数名称中表明。

8.分隔指令与询问 --函数要么做某件事,要么回答某个问题,但二者不可兼得。两样都做会导致二义性,增加理解难度和用错的几率。

9.使用异常替代返回错误码 --使用异常替代返回错误码能使错误处理代码从主路径代码中分离出来。

①.抽离try catch模块 --try catch模块丑陋不堪,搞乱了代码结构,最好抽离形成另外的函数。

②.错误处理就是一件事 --try catch之外不应该再有其他逻辑。

10.避免重复

11.结构化编程 --避免使用goto。

12.如何写出这样的程序 --写代码应该多修改,精益求精,就像写文章没有人能一开始就写得优雅,多修改,代码就会越来越漂亮

总结:阅读代码应该像阅读一篇说明文一样,因为这符合人思考逻辑,所以我们想让代码拥有自顶向下的阅读顺序。每个层面都逻辑清晰(通过函数名,函数参数等精心命名),思路完整(函数在当前层面逻辑内聚),每一个函数后面都跟着下一抽象层级的函数(对前面函数的解释说明),这样代码逻辑就清晰可见了。

猜你喜欢

转载自blog.csdn.net/qq_33594376/article/details/81286700