2011-05-19 60 views
1

每个参数的优缺点是什么?分别接受参数与数组

例如:my_func(a,b,c,d,e)vs my_func(params)。

一般来说,我喜欢前者,因为intellisense可以为使用IDE的人检测到它。而使用第二种方法则需要开发人员查找文档。不过,我注意到Facebook的JS SDK大量使用后者。

+0

我真的不明白要结束的选票。这是一个编程QA站点,这个问题是关于特定的,非常具体的编程实践的最佳实践的合理问题。 Pro's和Con's主要是客观的,通常很容易区分高质量的答案和不好的答案。如果不在这里,在哪里? – davin 2011-05-19 14:50:13

回答

1

接受参数数组的一个明显优势是您可以自由添加(或删除!)新参数而不会影响现有实现,因为方法签名不会更改。

选择传递参数的另一个可能的原因数组是你可以模拟named parameters,它可以使得方法更加灵活,避免必须拥有一个接受大量参数的方法签名。

1

这取决于你传递了什么,如果它有一组相关参数,那么数组是有用的。许多jQuery插件将一组选项作为关联数组收集,然后收集其他方法。编写插件时我通常会这样做:

var options = { option1: 'stuff', option2: 'etc' }; 
$('#id').myPlugin(options, 'disengage'); 

其中第二个参数是您希望插件执行的操作。

0

确实,这是一个多参数方法。

正如人们在这里提到的,js对象(这里的一个数组并不像IMO那么好)的优点是函数签名变得灵活。并非JavaScript像其他语言一样强制执行此操作,但每次您要更改参数时都不必更改函数签名。

Facebook使用您带来的示例,每10分钟更换一次SDK和其他协议(我不喜欢使用Facebook的东西进行开发,他们的文档令人震惊,他们有一种虐待狂的倾向,没有向后兼容性的新版本的东西,虽然这不是这个咆哮的地方)。所以对他们来说,这会有所帮助。

一个区别,我在一些场景中找到有用的:

通常,当一个函数执行某种动作,有什么功能应执行其任务定义参数。例如compare(3,4)将对参数34执行相关算术运算。

另一组参数是定义函数如何表现的参数。例如compare(3,4,'strict')。在这里,我没有将'strict'与任何东西进行比较,而是该参数告诉函数我想执行特定类型的比较。

在这个例子中,似乎不大可能会改变,所以主题大多不相关,尽管对于更复杂的函数来说并非如此。我经常发现最“稳定”的参数是的值,函数的定义通常基于这个值。而行为参数更经常更改,更经常不存在。

除了使方法签名更“稳定”之外,它使代码更具可读性,因为在每次函数调用时,通常可以看到函数的操作数是什么,而不是单个对象,这更难了解和调试。