在ruby中,伪代码之间有什么区别,如:
if n > 2:
do something to A
end
if n > 4:
do something to B
end
if n >25:
do something to C
end
vs
if n>2 && n <4:
do something to A
elif n >4 && n < 25:
do something to A and do something to B
elif n > 25:
do something to A and B and C
end
正如您所看到的,他们做同样的事情,但如果您有很多if then
语句,则更易于阅读和编写。但是,如果多个if
块占用更多处理能力,那么以这种方式编写就不值得。
因此我想知道两者之间是否存在差异?概念性答案很好,我不需要对任何事情进行基准测试
答案 0 :(得分:2)
1 /它们不等同。
第一个陈述相当于
if n>2 && n <= 4:
do something to A
elif n > 4 && n <= 25:
do something to A
do something to B
elif n > 25:
do something to A
do something to B
do something to C
end
如果do something to A
返回nil
或false
,则您的第二个语句将不会执行do something to B
。
您忘了处理n = 4
和n = 25
等角落案件。
2 /在99.9%的情况下,您应该选择更易于阅读/理解/调试的版本。除非此代码运行1000000次/秒,否则无关紧要。 正如您所看到的,您已经通过尝试过早地优化它来创建了2个潜在的错误:)
3 /在表演方面,简短的回答是:这取决于你的数据。答案很长:在大多数情况下,您必须尝试预测n
的范围。
您只需计算比较次数:
n < 2
:陈述1:3比较 - 陈述2:3比较
2 < n <= 4
:陈述1:3比较 - 陈述2:2比较
4 < n <= 25
:陈述1:3比较 - 陈述2:4比较
25 < n
:陈述1:3比较 - 陈述2:5比较
答案 1 :(得分:1)
没有区别。两个程序都将返回语法错误,并且不会运行。
答案 2 :(得分:0)
假设您无法预测“最常见的路径”(例如,在绝大多数情况下知道n介于2和4之间),我怀疑第二种方法会更有效率;比较的数量将是相似的。
答案 3 :(得分:0)
嗯,第一个选择减少了逻辑错误的可能性。在第二个选择中,如果n == 4
或n == 25
会发生什么?是的,您可以轻松解决这个问题,但您必须认识到这种可能性。
我认为“做某事”伪代码块只是方法调用,所以你不要重复多少文本。这是一个很难回答的问题,因为这两种方法都不涉及嵌套的if-else子句。 if条款在成本差异方面是如此微不足道,我不会考虑这一点,而“做某事”块的重复也是一样的。但是,我可以想象一种更清晰的方式。 A,B和C都可以有一个像A.handle(n),B.handle(n)和C.handle(n)这样的方法,如果n&lt; = 2,第一个什么都不做,第二个什么都不做如果n <= 4,则如果n <= 25,则第三个不做任何事情。