7

像这样:

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

如果这实际上是我需要这个特定计算的唯一地方,那么制作valid_eggs函数有什么意义吗?

4

5 回答 5

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."
于 2013-06-19T13:04:47.387 回答
5

这是一篇评论文章:是与否。

如果它是“复杂的” 1它可能属于其他地方。

如果它是“简单的” 2这不是问题。

这一切都归结为可读性、可维护性、适当的重用以及不做任何愚蠢的事情。


1. 对于不同的“复杂”值。2.对于“简单”的不同值。

于 2013-06-19T13:06:45.960 回答
3

绝对不。将代码放入#{...}插值器是 Ruby 中有趣的合法部分。为了可读性,您可以考虑:

puts "Today my ostrich laid %s valid eggs." % ( @eggs_laid - @stillborn - @wolves_ate )

但请注意,%插值和#{...}插值是两种不同的乐趣,不能完全互换。

于 2013-06-19T13:04:53.783 回答
2

我认为这很清楚 - 至少你的变量名是有意义的。纯粹主义者可能会说你应该将它提取到一种方法中——但实际上——YAGNI(你不需要它)也适用于红宝石。

如果你需要在第二个地方做,那么我会把它作为一种方法。你已经考虑过了。

于 2013-06-19T13:05:08.603 回答
1

显然,正如其他答案所述,这是值得商榷的。

您绝对应该提取操作的一种情况是当它们具有副作用时。

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

于 2013-06-19T13:29:21.200 回答