像这样:
puts "Today my ostrich laid #{@eggs_laid - @stillborn - @wolves_ate} valid eggs."
如果这是我唯一需要进行此特定计算的地方,那么制作valid_eggs
函数是否有任何意义?
答案 0 :(得分:5)
这本身并不坏。但如果表达式很复杂,则会降低代码的可读性。在这里,我把两个片段放在这里,哪一个读得更好?
puts "Today my ostrich laid #{@eggs_laid - @stillborn - @wolves_ate} valid eggs."
valid_eggs = @eggs_laid - @stillborn - @wolves_ate
puts "Today my ostrich laid #{valid_eggs} valid eggs."
答案 1 :(得分:5)
这是一个意见:是和否。
如果它是“复杂的” 1 ,它可能属于其他地方。
如果它是“简单” 2 ,那不是问题。
这一切都归结为可读性,可维护性,适当的重复使用以及不做任何愚蠢的事情。
1.对于“复杂”的不同值。 2.对于“简单”的不同值。 功能
答案 2 :(得分:3)
绝对不是。将代码放在#{...}
插值器中是Ruby中有趣的合法部分。为了便于阅读,您可以考虑:
puts "Today my ostrich laid %s valid eggs." % ( @eggs_laid - @stillborn - @wolves_ate )
但请注意%
插值和#{...}
插值是两种不同的乐趣,它们不是完全可互换的。
答案 3 :(得分:2)
我认为这很清楚 - 至少你的变量名是有意义的。一个纯粹主义者可能会说你应该把它提取到一种方法 - 但实际上 - YAGNI(你不需要它)也适用于红宝石。
如果你需要在第二个地方做,那么我会把它作为一种方法。你已经考虑过了。
答案 4 :(得分:1)
显然这是有争议的,正如其他答案所述。
您应该明确提取操作的一种情况是它们有副作用。
只要表达是指称透明的,它只是品味和主观可读性的问题。