函数参数的讨论
函数参数的讨论
函数准则
无副作用准则
函数参数是不是越少越好,
-
如果逻辑需要它们,那么它们也是必需的…只要正确地设置了格式并对其进行了注释以提高可读性,长参数列表根本不会让我担心
-
较大的参数列表可能表明您的程序可能结构不正确-可能需要大量参数的函数只是试图做太多事情,应该分成几个较小的函数。我宁愿从这里开始,也不必担心参数数量。
-
如果参数的全部或子集属于一个唯一的逻辑实体,并且通常在整个程序中成组地传递,则将它们分组到某个容器(通常是结构或其他对象)中可能是有意义的。典型示例可能是某种消息或事件数据类型。
您可以轻松地过度使用该方法-一旦发现在这种运输容器之间进行装箱和拆箱所产生的开销超过了其提高可读性的开销,那么您可能已经走得太远了。
-
x
如何减少函数参数
- 将参数提取到一个新的类中
- Concern:,但这肯定会导致类的爆炸式增长?
- A: 如果您的域模型具有许多不同种类的对象,那么您的代码将最终具有许多不同种类的对象。没错。
- Concern: 那些类可能以违反某些命名规则的名称结尾(以“ Data”或“ Info”等结尾)
- 如果找不到合适的名称,则可能是将太多参数组合在一起或将参数组合得太少。因此,您要么只是一个类的一部分,要么您有多个类。
- Concern:,但这肯定会导致类的爆炸式增长?
是使多个函数使用的变量成为私有成员变量,以避免传递它们,但这扩大了变量的范围,可能使它向实际上不需要它的函数开放(不可取,违反无副作用准则)- 使方法本身更小:也许,如果方法需要那么多参数,那么它做得太多了吗
- 缺少抽象:如果参数紧密相关,也许它们属于同一类,那么您是否缺少抽象?(规范的教科书示例:传递一个
Point
对象,而不是两个坐标,或者传递一个对象,而不是传递用户名和电子邮件IdCard
。)
ref
https://softwareengineering.stackexchange.com/questions/331803/techniques-for-minimising-number-of-function-arguments