unless discount.nil? || discount == 0 # ... end
Вы могли инициализировать скидку к 0, пока Ваш код, как гарантируют, не попытается использовать ее, прежде чем она будет инициализирована. Это удалило бы одну проверку, которую я предполагаю, я не могу думать ни о чем больше.
Я полагаю, что следующее достаточно хорошо для кода Ruby. Я не думаю, что мог записать модульный тест, который показывает любое различие между этим и оригиналом.
if discount != 0
end
Вы могли сделать это:
if (!discount.nil? && !discount.zero?)
порядок важен здесь, потому что, если discount
будет nil
, то он не будет иметь zero?
метод. Оценка короткого замыкания Ruby должна препятствовать тому, чтобы он пытался оценить discount.zero?
, однако, если discount
nil
.
if (discount||0) != 0
#...
end
unless [nil, 0].include?(discount) # ... end
class Object
def nil_zero?
self.nil? || self == 0
end
end
# which lets you do
nil.nil_zero? # returns true
0.nil_zero? # returns true
1.nil_zero? # returns false
"a".nil_zero? # returns false
unless discount.nil_zero?
# do stuff...
end
Остерегаются обычных правовых оговорок... великой державы / ответственность, продвижение исправления обезьяны к темной стороне и т.д.