有多少功能参数太多了?

时间:2008-11-25 21:47:50

标签: language-agnostic parameters

  

可能重复:
  How many parameters are too many?

我刚刚写了一个函数,它接受了几个值,它让我思考。函数/方法的参数的数量是多少?什么时候(如果)它表示有缺陷的设计?你设计/重构函数来接受结构,数组,指针等来减少参数的数量吗?你是否为了减少参数的数量而重构数据?不过,似乎这在OOP设计中可能稍微适用一些。只是好奇看其他人如何看待这个问题。

编辑:作为参考,我刚写的函数有5个参数。我使用了我的AP Econ老师给我的几个定义。超过2;不到7岁。

15 个答案:

答案 0 :(得分:18)

我不知道,但是当我看到它时我就知道了。

答案 1 :(得分:16)

Steve McConnell在代码完成中表示,你应该

  

限制例程的数量   参数大约七

答案 2 :(得分:8)

如果你不得不问那可能太多了。

答案 3 :(得分:4)

我一般认为,如果参数与功能相关(例如,坐标或颜色成分),则应将它们封装为一个良好测量的类。

并非我自己总是遵循这一点;)

答案 4 :(得分:2)

罗伯特·C·马丁(鲍勃叔叔)在Clean Code: A Handbook of Agile Software Craftsmanship

中推荐3作为最大值

我目前没有这本书,但他的推理与一,二,以及在较小程度上,三个论证函数读得很好,并清楚地显示了函数的目的。

这当然与他对非常简短,命名良好的功能的建议密切相关,这些功能遵循Single Responsibility Principal

答案 5 :(得分:1)

快速回答:当你不得不停下来问这个问题时,你已经太多了。

就个人而言,我喜欢将这个数字保持在六岁以下。如果需要更多,则解决方案取决于问题。一种方法是使用“setter”函数将值赋给最终将执行所需功能的对象。另一个选择是使用结构,如您所述。无论哪种方式,你都不会出错。

答案 6 :(得分:1)

嗯,这肯定取决于你的功能在做多少会被认为是“太多”。话虽如此,当然可以使用一个具有许多不同参数的函数,这些参数是如何处理函数内部某些情况的选项,并且具有这些函数的超载默认值。

随着Intellisense(或其他IDE中的等效物)的普及以及显示Visual Studio中XML文档的注释的工具提示,我并不认为这个问题有一个坚定的答案。

答案 7 :(得分:1)

参数太多是“代码嗅觉”。

您可以分为多个方法或使用类重新组合具有共同点的变量。

为“太多”添加一个数字是非常主观的,取决于您的组织和您使用的语言,一个经验法则是,如果您无法阅读您的方法的签名并且有一个想法这是做什么比你可能有太多的信息。 Personnaly,我尽量不要超过5个参数。

答案 8 :(得分:0)

对我来说是5.

除此之外很难管理(记住名称,顺序等)。加上如果我走到那么远,我有版本的默认值称之为。

答案 9 :(得分:0)

取决于功能,如果你的功能需要大量的用户干预或变量,我不会超过7-8范围。至于平均参数数量,5-6是我认为的最佳点。如果您使用的不止于此,则可能需要将类对象视为参数或其他较小的函数。

答案 10 :(得分:0)

因人而异。就个人而言,当我通过读取代码中的调用立即理解函数调用正在做什么时,是时候重构以消除灰色单元格的压力。

答案 11 :(得分:0)

我也听说过7位数字,但我觉得它源于你可以通过原始值传递的时间。

现在,您可以传递对封装某些复杂状态(和行为)的对象的引用。使用其中的7个肯定会太多。

我个人的目标是避免使用超过4个。

答案 12 :(得分:0)

这在很大程度上取决于参数的类型。如果它们都是整数,则2可能太多。 (我怎么记得哪个顺序?)如果任何参数接受null,那么数字会急剧下降。

真正的答案来自于问自己:

  • 在阅读代码时理解电话有多容易?
  • 在编写代码时记住正确的参数和参数顺序有多容易?

答案 13 :(得分:0)

它取决于编程语言。在C中,看到7个参数的函数真的并不罕见。但是,在C#中,我很少看到超过5个参数,我个人通常使用少于3个。

// In C 
 draw_dot(x, y, size, red, green, blue, alpha)

// In C# 
 Point point(x,y);
 Color color(red,green,blue,alpha);

 Tool.DrawDot(point, color);

答案 14 :(得分:-1)

我会说最多4。以上任何事情,我认为应该放在一个班级。