发送单个参数与参数数组


send individual parameters versus array of parameters

是否有将参数作为单个变量发送或将参数数组发送到函数/方法的通用良好实践惯例?

例如。

param1, param2, param3 vs array data  

如何确定使用两者中的哪一个,或两者的组合?

我的经验法则是,只要有两个以上的参数,就应该切换到传递某种类型的聚合(Array、Hash、Object、Record,等等)。如果是一个或两个主要参数和几个选项的情况,那么只将选项放入一个集合中,并将主要参数保留在它们自己的参数中。

当你问一个参数数组时,我假设你说的是相同类型(或相似类型)的参数。这实际上取决于情况,在调用方的方便性和函数实现的方便性之间有点折衷。这意味着它在很大程度上取决于你最想优化的内容。没有硬性规定,但你可以用这种思维作为指导:

如果:,请使用单独的参数

  1. 自变量的数量相对较少,通常是固定的
  2. 接收函数中的代码由于具有命名参数而更加简洁
  3. 进行函数调用的典型方式不是用程序构建参数列表

如果:,则使用阵列

  1. 参数的数量相对较大,或者通常是可变的(调用者可能想要构建一个数组并传递它)
  2. 通过在循环中处理参数的变量列表,接收函数更干净(这也可以用arguments对象来完成,但有时用实际数组更简单)
  3. 进行函数调用的一种常见方式是从以编程方式构建的参数列表中进行调用(调用方只需传递数组就更方便了)
  4. 被调用的函数希望能够轻松地将参数列表传递给其他函数调用。虽然这可以在没有数组的情况下通过处理arguments对象来完成,但如果没有在数组中传递arguments,则需要执行更多的代码

如果函数不是为了获取数组而构建的,但是调用者在数组中有参数,那么调用者通常可以通过使用.apply()来解决这两个问题。


仅供参考(尽管我不认为这是你问题的主要主题),另一种选择是传递一个具有可变数量属性的对象。当存在许多不同的参数并且大多数或全部都是可选的时,options对象特别有用。被调用的函数可以包含所有选项的默认值,调用方可以只传递他们想要覆盖默认值的参数。对于在数组或参数列表中更好地表示的相同类型参数的变量数,options对象通常不是最佳解决方案。