如何重构 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 按照逻辑,洗和剪可能是在黑暗中进行的,而且可能需要多次支付电费才能恢复供电。 ¯\_(ツ)_/¯.
下面是我的编码风格的一个例子。有时我最终会得到 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 按照逻辑,洗和剪可能是在黑暗中进行的,而且可能需要多次支付电费才能恢复供电。 ¯\_(ツ)_/¯.