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

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

情况是这样,有两个方法,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
共收到 4 条回复

具体情况具体分析

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

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

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

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

参数交互是越少越好

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

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