JS编程建议——26:小心if嵌套的思维陷阱

建议26:小心if嵌套的思维陷阱
人的思维是非常复杂的,这在一定程度上会增加if结构嵌套的复杂性。假设有4个条件,只有当这些条件全部成立时,才允许执行某件事情。遵循人的一般思维习惯,在检测这些条件时,常常会沿用下面这种结构嵌套:

  1. if(a){
  2. if(b){
  3. if(c){
  4. if(d){
  5. alert("所有条件都成立!");
  6. }
  7. else{
  8. alert("条件d不成立!");
  9. }
  10. }
  11. else{
  12. alert("条件c不成立!");
  13. }
  14. }
  15. else{
  16. alert("条件b不成立!");
  17. }
  18. }
  19. else{
  20. alert("条件a不成立!");
  21. }
    从思维的方向性上来考虑,这种结构嵌套并没有错误,使用下面这个if结构来表示更为简单。
  22. if(a && b && c && d){
  23. alert("所有条件都成立!");
  24. }
    从设计时的本意来考虑:使用if语句逐个验证每个条件的合法性,并且对某个条件是否成立进行提示,以方便跟踪每个条件。但是,如果使用了上面的if结构多重嵌套,就会出现另一种可能: a条件不成立,程序会自动退出整个嵌套结构,而不管b、c和d的条件是否成立。这种“武断”很容易给测试带来“伤害”。如果核心的处理过程包含多条语句,或者出错的情况处理更为复杂,层层包裹的if结构会使代码嵌套过深,难以编辑。 为避免上述情况的发生,一般采取排除法,即对每个条件进行排除,条件全部成立再执行特定的操作。为了能够把条件有机地联系在一起,这里使用了一个布尔型变量作为钩子把每个if条件结构串在一起。
  25. var t = true; // 初始化行为变量为true
  26. if(!a){
  27. alert("条件a不成立!");
  28. t = false;
  29. }
  30. if(!b){
  31. alert("条件b不成立!");
  32. t = false;
  33. }
  34. if(!c){
  35. alert("条件c不成立!");
  36. t = false;
  37. }
  38. if(!d){
  39. alert("条件d不成立!");
  40. t = false;
  41. }
  42. if(t){
  43. alert("所有条件都成立!");
  44. }
    排除法有效地避免了条件结构的多重嵌套,并且更加符合人的思维模式。当然,这种设计方法也存在一定的局限性,一旦发生错误,就要放弃后面的操作。如果仅为了检查某个值的合法性,也就无所谓了。如果为了改变变量值和数据操作等,那么直接放弃就会导致后面的数据操作无法进行,为了防止此类问题的发生,不妨再设计一个标志变量来跟踪整个操作行为。
上一篇:阿里云邀您参加 2020 年数据湖高峰会议


下一篇:阿里云发布空天数据库引擎Ganos aerospace 大幅提升空天传感数据存储和处理效率