我正在尝试编写快速简洁的代码。感谢您对以下代码的最佳编写方式以及原因的想法:
选项1
def get_title
title = check_in_place_one
if title.empty?
title = check_in_place_two
if title.empty?
title = check_in_place_three
end
end
return title
end
选项#2
def get_title
title = check_in_place_one
title = check_in_place_two unless !title.empty?
title = check_in_place_three unless !title.empty?
return title
end
我认为Option#1更好,因为如果通过title
找到check_in_place_one
,我们将测试title.empty?
一次,然后跳过方法中的其余代码并返回。但是,它看起来太长了。选项#2看起来更好,但是要多处理title.empty?
一个时间,而返回前会花费不必要的时间。另外,我是否缺少第三种选择?
从性能上看,代码的两个版本之间没有什么区别(除了可能因解析而产生的细微差别之外,这也是可以忽略的)。控制结构相同。
从可读性上讲,如果您可以避免嵌套,那么这样做更好。您的第二个选择更好。
通常最好清除不需要进一步处理的任何情况。这是由完成的return
。
def get_title
title = check_in_place_one
return title unless title.empty?
title = check_in_place_two
return title unless title.empty?
title = check_in_place_three
return title
end
上面的代码中的最后一个title =
和return
它们是多余的,但我将它们放在此处是为了保持一致性,从而提高了可读性。
您可以使用以下代码进一步压缩代码tap
:
def get_title
check_in_place_one.tap{|s| return s unless s.empty?}
check_in_place_two.tap{|s| return s unless s.empty?}
check_in_place_three
end
tap
这是一种非常快的方法,并且instance_eval
与之不同,它的性能损失通常是可以忽略的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句