WdBly Blog

懂事、有趣、保持理智

周维的个人Blog

懂事、有趣、保持理智

站点概览

周维 | Jim

603927378@qq.com

推荐阅读

代码整洁之道 - 整洁函数

读Robert C. Martin 的《clean Code》之函数章节记。

清晰的函数通常逻辑简单明了,流程控制直接了当,能让开发者短时间读懂函数,而混乱的函数中通常充满多层级的抽象,奇怪的字符串和函数,用标识符控制的if语句等,这些函数经常让开发者摸不着头脑。

我们想要编写一个好的函数,需要注意一些简单的细节。

尽量短小

函数的第一个规则既是短小

通常说函数的长度应该小于一屏幕的高度,但由于现代编辑器和硬件尺寸,一屏的高度也变得有些大了。

通常20行以下为最佳的函数大小。

代码块的大小(if, else, while等)最好只有一行,这一行大概率应该是简单明了的语句或者是一个函数的调用。

这也意味着函数的缩进应该尽量的短,小于2层最佳。

如果你的函数不满足短小的规则,试试看能否优化一些流程上的控制来减小函数呢?

只做一件事

函数的下一个规则是只做一件事

分析很多混乱的代码其实不难发现,它们往往想在一个函数中做太多事情。

要判断函数是否只做了一件事,就是看是否能再拆出一个函数。

向下规则

我们要让代码拥有自顶向下的阅读顺序,这样能保证阅读者的思路能跟随代码的顺序一直延伸。 JS中的异步可以使用await等实现。

使用描述性的命名

函数的名称最好是能描述出函数的功能

长而具有描述性的名称要优于端而令人费解的名称

对于一个模块的多个相似函数,命名方式需要保持一致,如都以include开头

函数的参数

理想的函数参数应该为0

除非有特殊的理由,应该避免大于2个参数的函数。

多参数在代码阅读时是一个灾难,每次阅读到函数时,都需要将参数翻译一遍。

从测试的角度出发,多参数的函数需要的测试用例的组合方式更是多得令人生畏。

不要尝试用参数输出函数的结果,而是使用返回值的形式输出函数的结果。

标识参数

向函数传入布尔值的参数的做法是骇人听闻的,这意味着你的函数做了不止一件事。

好的做法是拆分为两个函数。

参数对象

如果一个函数看起来确实需要超过2个参数,那么可以考虑对其中一些参数进行封装操作了。

const multiParameter = (name, age, sex, weight) => { ... } let people = {name, age, sex, weight} const multiParameter = people => { ... }

参数和函数名

对于一元函数(只有一个参数),函数名和参数名应该形成一种良好的动词/名词形式, 如write(name) add(people)

无副作用

通常来说,在函数内部,使用了全局的变量,这会导致,函数的运行结果,跟外边的变量的状态关联起来,多次运行函数的结果可能不一致,有可能造成令人意外的结果。

输出参数

如果一个函数,接收一个对象参数,在函数内部对参数进行了改变,然后返回这个参数。我们可以这样修改。

将函数作为方法添加到对象上,然后作为对象的方法调用,最后在方法内部修改this上的属性即可。

let people = { name: "jim", age: 28, setName: name => { this.name = name; } } people.setName("wdbly");

抽离try/catch代码块

try/catch代码块在主流程中通常是丑陋不堪的,最好将之代码块的主体抽离出来,另外形成函数。

抽离重复算法

在多个函数中,我们可能使用了相同或相似的算法方法去处理一些事,这就造成了重复,这使得我们的代码变得臃肿。

同样的道理,当我们的算法发生改变时,我们需要修改的地方也非常多。

将相似算法抽离为一个公共且独立的函数,供其它函数使用是一个好的解决方案。

总结

写代码和写文章也是类似的,刚开始的初稿可能只有一个大概的架子,是粗陋无序的。

但是好的代码和文章都是需要作者不断斟酌推敲,逐步完善的。

提交

全部评论0

暂时没有评论...