JS编程建议——24:优化if逻辑(1)-阿里云开发者社区

开发者社区> zhanginzaghi> 正文

JS编程建议——24:优化if逻辑(1)

简介: 24:优化if逻辑(1)
+关注继续查看

建议24:优化if逻辑(1)
逻辑顺序体现了人的思维的条理性和严密性。合理的顺序可以提升解决问题的品质,相反,混乱的顺序很容易导致各种错误的发生。在分支结构中经常需要面临各种优化逻辑顺序的问题。
人在思考问题时,一般总会对各种最可能发生的情况做好准备,这叫做“有备而来”。分支结构中各种条件根据情况的先后、轻重来排定顺序。如果把最可能的条件放在前面,把最不可能的条件放在后面,这样程序在执行时总会按照代码先后顺序逐一检测所有条件,直到发现匹配的条件时才停止继续检测。如果把最可能的条件放在前面,就等于降低了程序的检测次数,自然也就提升了分支结构的执行效率,避免空转,这在大批量数据检测中效果非常明显。例如,对于一个论坛系统来说,普通会员的数量要远远大于版主和管理员的数量。换句话说,大部分登录的用户都是普通会员,如果把普通会员的检测放在分支结构的前面,就会减少计算机检测的次数。
if优化目标:最小化找到正确分支之前所判断条件体的数量。if优化方法:将最常见的条件体放在首位。例如:

  1. if(value < 5) {
  2. //do something
  3. } else if(value > 5 && value < 10) {
  4. //do something
  5. } else {
  6. //do something
  7. }
    这段代码只有在value 值经常小于5 时才是最优的。如果value 经常大于或等于10,那么在进入正确分支之前,必须两次运算条件体,导致表达式的平均运行时间增加。if中的条件体应当总是按照从最大概率到最小概率的顺序排列,以保证理论运行速度最快。

另外一种减少条件判断数量的方法:将if编写成一系列嵌套结构。使用一个单独的一长串的if结构通常导致运行缓慢,因为每个条件体都要被计算,例如:

  1. if(value == 0) {
  2. return result0;
  3. } else if(value == 1) {
  4. return result1;
  5. } else if(value == 2) {
  6. return result2;
  7. } else if(value == 3) {
  8. return result3;
  9. } else if(value == 4) {
  10. return result4;
  11. } else if(value == 5) {
  12. return result5;
  13. } else if(value == 6) {
  14. return result6;
  15. } else if(value == 7) {
  16. return result7;
  17. } else if(value == 8) {
  18. return result8;
  19. } else if(value == 9) {
  20. return result9;
  21. } else {
  22. return result10;
  23. }
    在这个if结构中,所计算的条件体的最大数目是10。如果假设value 的值在0~10 之间均匀分布,那么会增加平均运行时间。为了减少条件判断的数量,可重写为一系列嵌套结构,例如:
  24. if(value < 6) {
  25. if(value < 3) {
  26. if(value == 0) {
  27. return result0;
  28. } else if(value == 1) {
  29. return result1;
  30. } else {
  31. return result2;
  32. }
  33. } else {
  34. if(value == 3) {
  35. return result3;
  36. } else if(value == 4) {
  37. return result4;
  38. } else {
  39. return result5;
  40. }
  41. }
  42. } else {
  43. if(value < 8) {
  44. if(value == 6) {
  45. return result6;
  46. } else {
  47. return result7;
  48. }
  49. } else {
  50. if(value == 8) {
  51. return result8;
  52. } else if(value == 9) {
  53. return result9;
  54. } else {
  55. return result10;
  56. }
  57. }
  58. }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java性能优化之编程技巧总结
1、慎用异常 在Java软件开发中,经常使用 try-catch 进行错误捕获,但是,try-catch 语句对系统性能而言是非常糟糕的。
853 0
+关注
zhanginzaghi
IT菜鸟
90
文章
25
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载