什么是重构以下ruby代码的方法

时间:2017-07-20 09:52:00

标签: ruby-on-rails ruby

def self.method_A 
  a = xx
  b = xx
  c = xx
  d = xx

  complex_computing1(a, b, c, d)
end


def self.method_B
  a = xx
  b = xx
  c = xx
  d = xx

  complex_computing2(a, b, c, d)
end

我需要重构上面的代码,所以我创建了一个名为method_C

的方法
def self.method_C
  return {
    a: xx,
    b: xx,
    c: xx,
    d: xx,
  }
end

所以,在method_A

它将成为

def self.method_A
  result = method_C
  complex_computing1(result[:a], result[:b], result[:c], result[:d])
end

但我不认为这是最好的方式,有人能给我更多的建议吗?

1 个答案:

答案 0 :(得分:0)

首先,我假设你已经抽象了你的实际代码 - 这使得很难建议实际的工作重构,因为不清楚什么是常量以及额外计算的结果是什么。为了我的建议,我假设xx表示的所有值都是方法调用的结果,因此不能像Shimu建议的那样简单地变成常量。

在这种情况下,可能最简洁的重构方法是:

def self.method_A
  complex_computing1(*method_C.values_at(:a, :b, :c, :d))
end

如果它们的键没有真正的逻辑,你可以利用在Ruby中排序哈希的事实(至少从Ruby 1.9开始)并执行此操作:

def self.method_A
  complex_computing1(*method_C.values)
end

希望能回答你的问题。