如果以下不是最好的风格,那么等价的表达方式是什么?
if (some_really_long_expression__________ && \
some_other_really_long_expression)
续行感觉很难看。但我很难找到更好的选择。
如果以下不是最好的风格,那么等价的表达方式是什么?
if (some_really_long_expression__________ && \
some_other_really_long_expression)
续行感觉很难看。但我很难找到更好的选择。
在延续明确的情况下,解析器不需要反斜杠。例如,使用 Ruby 2.0:
if true &&
true &&
true
puts true
end
#=> true
以下是刚玩过 Ruby 的人对行长度问题的一些或多或少的随机想法。我也没有接受过任何软件工程师的培训,所以请考虑一下自己。
我发现长行的问题通常是字符数多于操作数。前者可以通过(鼓)缩短变量名和方法名来减少。当然,问题是使用冗长过滤器(又名 babbling、prattling 或 jabbering 过滤器)是否会使代码更难理解。您多久看到一次与以下内容相当接近的内容(没有\
)?
total_cuteness_rating = cats_dogs_and_pigs.map {|animal| \
cuteness_calculation(animal)}.reduce {|cuteness_accumulator, \
cuteness_per_animal| cuteness_accumulator + cuteness_per_animal}
将其与以下内容进行比较:
tot_cuteness = pets.map {|a| cuteness(a)}.reduce(&:+)
首先,我认为块中局部变量的长名称没有任何好处(并且很少用于方法中的局部变量)。a
在这里,在计算中指的是什么不是很明显tot_cuteness
吗?a
当它被限制在一行代码中时,你需要记住多好的记忆?
其次,尽可能使用可枚举的缩写形式,后跟一个块(例如,reduce(&:+)
)。这使我们能够在微秒内了解正在发生的事情,只要我们的眼睛锁定+
. 相同,.to_i
对于_s
或_f
。没错,reduce {|tot, e| tot + e}
不会再长了,但我们正在强迫读者的大脑解码两个变量以及运算符,什么时候+
才是真正需要的。
另一种缩短生产线的方法是避免长链操作。然而,这是有代价的。就我而言,链条越长越好。它减少了对临时变量的需求,减少了代码行数,并且——可能是最重要的——允许我们像大多数人习惯的那样跨行阅读,而不是向下阅读。上面的代码行是“要计算总的可爱度,请计算每只宠物的可爱度等级,然后将这些等级相加”。怎么可能更清楚?
当链特别长时,它们可以写成多行而不使用续行字符\
:
array.each {|e| blah, blah, ..., blah
.map {|a| blah, blah, ..., blah
.reduce {|i| blah, blah, ..., blah }
}
}
这与单独的陈述一样清楚。我认为这经常在 Rails 中完成。
缩略语怎么用?以下哪个名字最清楚?
number_of_dogs
number_dogs
nbr_dogs
n_dogs
我认为前三个同样清楚,如果作者始终在变量名前面加上n_
“数量”的前缀,那么最后一个也同样清楚。相同tot_
,以此类推。足够的。
一种方法是将这些表达式封装在有意义的方法中。而且您也许可以将其分解为多种方法,以便以后重用。
除此之外,您提供的信息很少,很难提出任何建议。您也许可以使用命令对象或类似的东西摆脱 if 语句,但我不知道它是否对您的代码有意义,因为您没有显示它。
Ismael 的答案在 Ruby 中非常有效(可能还有其他语言),原因有两个:
我要放弃的另一个选择是创建逻辑方程并将结果存储在变量中,例如
# this are short logic equations testing x but you can apply same for longer expressions
number_gt_5 = x > 5
number_lt_20 = x < 20
number_eq_11 = x == 11
if (number_gt_5 && number_lt_20 && !number_eq_11)
# do some stuff
end