这是一个非常广泛的问题,存在很大的主观偏见空间。
人们普遍认为可读性总是一件好事。但是,阅读的内容因人而异。
例如,从您的示例中,我实际上更喜欢第二种变体。
有很多人会说,把你的代码分散开来,这很有帮助,但是有些人(包括我自己)更喜欢不那么分散的代码(在限制范围内!),因为它让我更容易感受到对于远处的代码(结构,循环,条件等)的“形状”。
在您的示例中,使用一种或另一种变体几乎不会影响可读性。但是假设你有一个像这样的公式:
r1 = $r*(($objcols-i).to_f+j+k)*3/total_objs
这里面有更多的术语,所以很难观察到。你可以把它拆开:
t1 = ($objcols-i).to_f
t2 = t1 + j + k
t3 = $r * t2 * 3
r1 = t3 / total_objs
但这是否使它更具可读性?实际上,这个特殊的公式只是一个神奇的公式,可以产生漂亮的随机旋转。
您可以通过水平展开来妥协:
r1 = $r*( ($objcols-i).to_f+j+k ) * 3 / total_objs
至少可以对主要术语进行分组。
但归根结底,我们谈论的是微型。是否有人需要 3 秒或 10 秒来理解该片段并不重要。这些更重要:
- 表达的原因必须是显而易见的。如果从代码本身来看并不明显,那么它需要一个注释来解释它。
- 代码应该易于导航。这表示:
- 消除/减少重复代码
- 将您的程序分解为不太小或太大的函数。同样,“太小”和“太大”是主观术语,通常有例外。
- 用大量评论解释更复杂和更高级的结构(例如大型交互类网络)。
最后,你知道你能做到吗?(至少在 ruby 1.9+ 中):
random_animal = animals.sample
它从 中获取一个随机元素animals
。