在ruby或编程中,最好的做法是尽可能简洁,因为语言允许或简洁而仍然可读?例如:
animals = %w{ cat dog bird }
chosen_animal = rand(animals.length)
random_animal = animals[chosen_animal]
或者
animals = %w{ cat dog bird }
random_animal = animals[rand(animals.length)]
我感觉第二个是更好的代码。使用第一个有什么好处吗?你会用哪个?为什么?
答案 0 :(得分:4)
尽可能简洁,语言允许或简洁,但仍然可读?
总是,总是喜欢可读性。简洁性只有在它使您的代码更多可读时才会有用(即,更少的冗长和混乱)。如果它模糊了代码并且仅用于减缓开发速度,它就不会为您节省任何费用。
只有绝对必要时,可读性/可维护性才会落后于性能问题。在像Ruby这样的语言中通常不会出现这种情况,在C语言中更常见的情况是,当已经证明存在瓶颈时,只能通过执行一些可能使代码稍微难以理解的低级优化来解决这个问题。 。在这种情况下,请添加用于彻底解释代码行为的注释。
答案 1 :(得分:1)
这是一个非常广泛的问题,有很大的主观偏见空间。
人们普遍认为可读性始终是一件好事。然而,可读性因人而异。
例如,从您的示例中我实际上更喜欢第二种变体。
有很多人会说,传播你的代码,这会有所帮助,但有些人(包括我自己)更喜欢不那么分散的代码(在极限范围内!),因为它让我更容易感受远处代码(结构,循环,条件等)的“形状”。
在您的示例中,使用一个或另一个变体几乎不会影响可读性。但假设你有一个类似的公式:
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
获取随机元素。