例程可以有参数,这不是新闻。您可以根据需要定义任意多的参数,但是过多的参数会使您的例程难以理解和维护。

当然,您可以使用结构化变量作为解决方法:将所有这些变量放在单个结构中并将其传递给例程。事实上,使用结构来简化参数列表是Steve McConnell在Code Complete中描述的技术之一。但正如他所说:

谨慎的程序员避免将数据捆绑在一起,除非逻辑上是必要的。

因此,如果你的例程有太多的参数,或者你使用一个结构体来掩盖一个大的参数列表,你可能做错了什么。也就是说,你没有保持耦合松散。

我的问题是,什么时候我可以认为一个参数列表太大?我认为5个以上的参数太多了。你怎么看?


当前回答

根据Steve McConnell在Code Complete中的说法,你应该这样做

限制一个程序的数量 参数约为7

其他回答

根据Perl最佳实践,3个是可以的,4个太多了。这只是一个指导方针,但在我们店里,这是我们努力遵守的。

如果我在一个例程中有7-10个参数,我会考虑将它们捆绑到一个新类中,但如果这个类只是一堆带有getter和setter的字段,那么这个新类必须做一些其他的事情,而不是将值移进和移出。否则,我宁愿忍受很长的参数列表。

根据Steve McConnell在Code Complete中的说法,你应该这样做

限制一个程序的数量 参数约为7

短期记忆中的七件事?

函数名称 返回函数的值 函数的目的 参数1 参数2 参数3 参数4

我自己把公共函数的极限画在5个参数上。

恕我直言,长参数列表只适用于私有/本地helper函数,这些函数只能从代码中的几个特定位置调用。在这些情况下,您可能需要传递大量的状态信息,但可读性并不是一个大问题,因为只有您(或维护您的代码并应该了解模块基础的人)必须关心调用该函数。