【发布时间】:2018-01-26 04:05:07
【问题描述】:
以下是我的编码风格示例。有时我会得到 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
第二种风格的方法名意义不大。这是重构程序的正确方法吗?
【问题讨论】:
-
意见问题,正如您所提到的,在这里通常不受欢迎。您可能想查看codereview.stackexchange.com
-
@Josh,我同意你的建议,但更多的是因为 OP 提供了工作代码。 SO 关注损坏的代码和“如何做”问题,而代码审查旨在展示如何改进工作代码。
-
你告诉程序(或机器人?)制作果汁,它可能会在一个黑暗的厨房里支付账单——这听起来不对。如果出现问题,失败不是更有意义吗?
-
@Stefan 是绝对正确的,这就是问题的症结所在。通常,长方法表明您违反了Single Responsibility Principle。在这种情况下,很容易发现。没有人会期望支付账单会成为榨汁程序的一部分。在现实世界的场景中,这可能会很棘手,但如果您认识到重构模式,您就可以改进代码。推荐书籍:重构(Ruby 版)和 Sandi Metz 的书籍。
-
@MarkThomas 谢谢推荐书
标签: ruby coding-style