建议24:优化if逻辑(2)
重写if结构后,每次抵达正确分支时最多通过4个条件判断。新的if结构使用二分搜索法将值域分成了一系列区间,然后逐步缩小范围。当数值范围分布在0~10 时,此代码的平均运行时间大约是前面代码的一半。此方法适用于需要测试大量数值的情况,而相对离散值来说switch 更合适。
当然,在性能影响不是很大的情况下,遵循条件检测的自然顺序会更容易阅读。例如,对于检测周一到周五值日任务安排的分支结构来说,虽然周五的任务比较重要,但是这类任务有着明显的顺序,安排顺序结构还是遵循它的自然逻辑比较好。如果打乱条件的顺序,把周五的任务安排在前面,对于整个分支结构的执行性能没有太大的帮助,并且不方便阅读代码。考虑到这一点,按自然顺序来安排结构会更富可读性。
应注意分支之间的顺序优化,当然在同一个条件表达式内部也应该考虑逻辑顺序问题。在执行逻辑“与”或逻辑“或”运算时,有可能会省略右侧表达式的计算,如果希望不管右侧表达式是否成立都进行计算,就应该考虑逻辑顺序问题。例如,有两个条件a和b,其中条件a多为true,b就是一个必须执行的表达式,那么下面的逻辑顺序设计就欠妥当:
- if(a && b){
- }
如果条件a为false,则JavaScript会忽略表达式b的计算。如果b表达式影响到后面的运算,那么不执行表达式b自然会对后面的逻辑产生影响,这时可以采用下面的逻辑结构,在if结构前先执行表达式b,这样即使条件a的返回值为false,也能够保证表达式b被计算。 - var c = b;
- if(a && b){
- }