2010-04-01 191 views

回答

5

越少越好,但前提是它仍然有意义。我从来没有听说过要传递标准数量的参数,但我听说过让它们更好的方法。

例如,不这样做:

public void DoSomething(string name, int age, int weight, ...) { } 

而是:

public void DoSomething(Person person) { } 

但希望是不言而喻的。而且,我建议不要创建一个奇怪的类来减少参数数量。

+0

我会的。我发现,当我需要很多参数时,我倾向于在多个地方需要它们,或者我需要不断添加更多参数。这就是为什么我们有类似于.NET中的EventArgs模式的原因。 – 2010-04-01 07:18:44

+0

这是一个好点 – Joel 2010-04-01 17:51:49

+0

乔尔:你的答案的好点,但我已经读过一些文章,如果参数的数量超过5然后使用结构。我喜欢这种说法,如果你有更多的参数然后定义结构并使用该结构来传递参数。 – 2010-04-02 04:22:02

7

Code Complete表明最多7.这是因为The Magical Number Seven, Plus or Minus Two

...对象的平均人类可以在工作记忆保持的数目是7±2;这通常被称为米勒定律。

下面是从代码完成第二版的摘录:

限制常规的参数,以约七

七数量是人们理解一个神奇的数字。心理学研究发现,人们通常不能同时追踪七个以上的信息(Miller,1956)。这一发现已经应用于许多学科,并且推测大多数人不能同时追踪超过七个常规参数似乎是安全的。

+4

如果数字是7±2,我们不应该采取低端,并说最多5? – 2010-04-01 07:16:53

+0

@Jonathan查看我的编辑。它实际上是7. – 2010-04-01 07:28:45

+1

这是如此的真实。我曾经在空军中上过一堂课,教官在板上放置了这个序列,要求我们记住它,然后重复它:C130KC10C140L1011C5。并非空军中的每个人都能看到飞机,但我碰巧正在编写一个关于货机的程序,所以我看到了更容易记住的事情:C130,KC10,C140,L1011,C5 – 2010-04-01 11:15:34

3

恕我直言5在MAX。

6对我来说太多了,7 压倒性的

+0

所以你遵守米勒法则,然后安东暗示:) – Default 2010-04-01 11:15:22

+0

是的!我不喜欢的Millers法律的部分是“7 + 2”,它的数字太大了! – 2010-04-01 12:15:43

1

如果您有很多事情想传递给函数,您可能需要查看其他一些传输数据的方法,而不是传递简单的参数。例如,在某些情况下,生成XML文件然后传递与获取有关该XML文件的数据相关的值可能会更好。如果你正在运行一个网络应用程序,它可能只是简单地通过会话或邮件传递数据,而不是获取或函数调用,这将简化你的生活。

此外,您可能希望将某些信息存储为成员变量。

我会推荐不超过4个。你不想让你的线获得长于30个字符的长度,除非你生成了一些巨大的字符串,但即使如此,它变得真的不可读和粗糙(尽管对于JavaScript )。

1

编写程序以便易于阅读是一种很好的编程习惯。就我个人而言,我尽量不要编写具有比在屏幕上的一行显示的参数更多的参数。通常最多不超过5或6个参数。

0

一些ARM编译器使用寄存器传递三个或更少的参数,并且三个以上的堆栈都被堆栈。叠加类型的调用比使用寄存器的调用慢,所以在这种情况下,您应该使用三个或更少的参数来提高速度。

1

根据清洁守则 - 最多3

+3

祝您好运,创建一个'Rectangle'构造函数。 – kennytm 2010-04-01 09:40:45

+0

您可以创建一个类,然后传递和对象来运行 – ilkin 2010-04-01 11:02:23

0

如果你不知道你要多少个参数传递给函数使用的参数有关发送可变参数的方法。

0

根据体系结构的不同,超过1-3个会导致堆栈传递。这比通过寄存器传递要慢。从性能的角度来看,最好传递一个指向包装类的指针或一个指向结构体的指针。这确保只传递一个值并将一些写入/读取保存到内存中。

相关问题