写点什么

编程好习惯之理清函数参数

用户头像
顿晓
关注
发布于: 2021 年 04 月 05 日
编程好习惯之理清函数参数

遇到的问题

每当看到这样的函数调用时,就会觉得诧异。

sort('param1', 'param2', true)decode('param1', 'param2', false)dosomething('param1', undefined, 'params3')
复制代码


如上,函数 sort 知道是要做排序,但有个 2 选 1 的条件,需要查看参数定义或实现代码才能明白;而函数 decode 则可能猜不出第三个参数的用意,至于 dosomething 的第二个参数,则只能当做特事特办了。


像这样的函数定义,在使用时也会觉得别扭:

  • 可能是函数包含了多个功能,不同的调用方只用到其中部分功能

  • 也可能是功能是一体的,但有些配置和调用上下文无关的,函数这样定义了,不得不传入

分析

随着业务成长起来的代码,需求开始都是简单的,后来慢慢变复杂,就可能会体现在原先封装好的函数,需要增加一个参数来应对不同的需求。

如果判断是个二选一的情况,就会加个 boolean 类型的参数到参数列表末尾。

更复杂的情况,则会注入一些只有个别场景需要的参数,而其他情况不需要,就只能传入 undefined

解决

如果要修改的函数有多处调用,则尽量保持原函数定义,采用增加新函数来实现满足新需求的功能,一般可以将新函数命名为 xxxExt,如:sortExtdecodeExt,原先的函数定义可以通过调用 xxxExt 的方式来实现,以达到复用的目的。

const sortExt = (param1, param2, dec) => {...}const srot = (param1, param2) => sortExt(param1, param2, true)
复制代码


发布于: 2021 年 04 月 05 日阅读数: 17
用户头像

顿晓

关注

因观黑白愕然悟,顿晓三百六十路。 2017.10.17 加入

视频号「编程日课」 知识星球「俺的死党顶」

评论

发布
暂无评论
编程好习惯之理清函数参数