将操作置于#{these}中是不是很糟糕?

时间:2013-06-19 13:02:17

标签: ruby

像这样:

puts "Today my ostrich laid #{@eggs_laid - @stillborn - @wolves_ate} valid eggs."

如果这是我唯一需要进行此特定计算的地方,那么制作valid_eggs函数是否有任何意义?

5 个答案:

答案 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)

显然这是有争议的,正如其他答案所述。

您应该明确提取操作的一种情况是它们有副作用。

只要表达是指称透明的,它只是品味和主观可读性的问题。