class Die
def initialize(labels)
if labels.length < 1
raise ArgumentError.new('Please put one letter of the alphabet.')
end
@labels = labels
end
def sides
@labels.length
end
def roll
@labels.sample
end
end
p die = Die.new(['A', 'B', 'C', 'D', 'E', 'F'])
p die.roll
大家都知道,如果你调用sides方法,这段代码应该返回die所具有的边数。如果调用roll方法,它应该返回模具的随机侧。如果没有参数传递给数组,它应该返回自定义的ArgumentError消息。
答案 0 :(得分:1)
不应重构此类。重构的目的是使代码保持清洁,可读,高效和可维护。这可能意味着很多事情,包括寻找重用代码而不是编写代码的方法,或者将长度超过10行的方法分成多个较小的方法。
我强烈建议您阅读(unofficial) ruby style guide。
您会注意到您的类和方法名称描述了对象是什么以及它做了什么,方法都在十行以下。这些都是代码不需要重构的好迹象。如果您有任何想法,请将方法名称sides
更改为num_sides
,使其更具描述性,或@labels
更改为@faces
。
编辑:您始终可以将if语句转换为一行,并且不需要end
raise ArgumentError.new('Please put one letter of the alphabet.') if labels.length < 1
TL; DR这是干净的代码,不需要重构。
答案 1 :(得分:0)
你可以这样做。
class Die < Array
def initialize(labels)
if labels.length < 1
raise ArgumentError.new('Please put one letter of the alphabet.')
end
super
end
alias_method :sides, :length
alias_method :roll, :sample
end