如何重构 ruby 中的长方法

How to refactor a long method in ruby

下面是我的编码风格的一个例子。有时我最终会得到 50 行方法。

def make_juice
  wash_fruits()
  cut_fruits()

  while(true) do
    if electicity_available?
      turn_on_lights()
      break
    else
      pay_electricity_bill()
      sleep(60)
    end
  end

  mix_fruits_in_mixer()
  add_sugar()
end

# ---------- function definitions ----------

def wash_fruits
  # ...
end
def cut_fruits
  # ...
end
def electricity_avalable?
  # return true  if available
end
def turn_on_lights
  # turn on 
end
def pay_electricity_bill
  # pay
end
def create_juice
  # steps for creating juice
end
def add_sugar
  # steps for adding sugar
end

编写长方法不是 ruby 惯例,我想知道重构 ruby 程序的标准方法。我尝试重构代码并得到以下结果:

def wash_fruits
  # ...
  cut_fruits
end

def cut_fruits
  # ...
  turn_on_lights
end

def turn_on_lights
  while(true) do
    if electricity_avalable?
      turn_on_lights
      break
    else
      sleep 1.hour
    end
  end
  mix_fruits_in_mixer
end

def mix_fruits_in_mixer
  # ...
  add_sugar
end

def turn_on_lights
  # ...
end

def add_sugar
  # ...
  # ... program exits
end

第二种方式的方法名意义不大。这是重构程序的正确方法吗?

我倾向于写下1.

def make_juice
  wash_fruits
  cut_fruits
  turn_on_lights
  mix_fruits_in_mixer
  add_sugar
end

def turn_on_lights
  until electricity_available?
    pay_electricity_bill()
    sleep(60)
  end
  flip_switch_on
end

1 按照逻辑,洗和剪可能是在黑暗中进行的,而且可能需要多次支付电费才能恢复供电。 ¯\_(ツ)_/¯.