新手问题 关于函数参数传递是越少越好,还是允许冗余的情况出现

tinyfeng · 2018年08月03日 · 最后由 luikore 回复于 2018年08月06日 · 1944 次阅读

情况是这样,有两个方法,a 和 b,a 中调用了 b

通过 var_a 可以计算出 var_b,而 var_c 需要通过 var_a 和 var_b 计算得到

通过 var_a 和 var_b 计算得到 var_c 具备一个独立且有意义的功能,因此定义一个 b 方法

在 b 方法里,得到 var_c 有两种途径:

1.传入 var_a,通过 var_a 计算出 var_b,再通过两者计算出 var_c,这样的话,在 a 中调用 b 方法,var_a -> var_b 相当于计算了两次

2.传入 var_a 和 var_b,后者是冗余的,只是为了免去一次重复的计算,当然 var_b 可以通过设置缺省值 nil,var_b 为 nil 的时候还是通过 var_a 去计算 var_b

def a
  var_a # 假设这里计算出一个var_a
  var_b # var_b通过var_a计算得到
  var_c = b()
  # 假定这里还有一些处理var_a和var_b的逻辑
end

def b(?)
  var_a
  var_b
  var_c # var_c通过var_a和var_b计算得到
end

具体情况具体分析

看完描述,我第一个反应是:如果 var_a, var_b, var_c 都是临时变量,并且方法 a 和方法 b 只负责处理这 3 个临时变量。那么把方法 a 和 b 放在当前这个类里的意义是?

这种情况下我会把计算出 var_a 和 var_b 的那些变量拿出来放到一个新的类里,变成成员变量,然后在新的类里面组织这些成员变量的方法,把方法 a 和 b 移到这个类里面。

楼主的描述还是比较模糊,比如说计算出 var_a 的变量有哪些,我们根本没法知道。其实讨论这样的问题把真实代码拿出来最好。

具体问题具体分析,主要考虑的因素是这样做让逻辑更清晰了吗?要抵抗减少代码量的诱惑。SOLID 的单一职责原则对方法的设计也是有参考意义的。

参数交互是越少越好

但这里也可能是你的方法拆分有问题,不该拆或者换种方式拆

需要 登录 后方可回复, 如果你还没有账号请 注册新账号