处理嵌套在多级条件中的函数调用

Handling a function call nested within multiple levels of conditionals

基本上,如果满足多个级别的条件,我想展示一些东西。我很好奇 3 种不同方法的性能和可维护性。 :

// Approach 1
if (condition_1) {
   // do_stuff_1 ;
   if (condition_2) {
      // do_stuff_2 ;
      // The crux of the biscuit -- the only time we show the thing.
      show_thing(my_thing) ;
   } else {
      // do_stuff_not_2 ;
      // Hide here ...
      hide_thing(my_thing) ;
   }
} else {
   // do_stuff_not_1 ;
   // ... and hide here
   hide_thing(my_thing) ;
}

show/hide 可以在嵌套条件语句的操作之前、期间或之后发生。实际代码有更多级别的条件。我相信您可以想出自己的方法,但我特别询问这 3 种方法的性能和可维护性。我喜欢#3,因为它简短而切题。要解决 invernomuto,请帮助我了解特定的可维护性问题。

方法 1(上文)。为每个可能的条件调用 "hide_thing()" 或 "show_thing()"。缺点:每个条件的额外代码。

方法二、一开始就调用"hide_thing()",然后在我想要激活的特定条件下调用"show_thing()"。缺点:在稍后显示时浪费了周期来隐藏东西。

方法 3. 将变量设置为 "show_thing" 或 "hide_thing",然后通过条件部分后的变量调用函数。缺点:??

// Approach 2
// Hide by default
hide_thing(my_thing) ;
if (condition_1) {
   // do_stuff_1 ;
   if (condition_2) {
      // do_stuff_2 ;
      // the only time we show the thing.
      show_thing(my_thing) ;
   } else {
      // do_stuff_not_2 ;
   }
} else {
   // do_stuff_not_1 ;
}

// Approach 3
// Indirect show/hide
var show_hide = hide_thing ;

if (condition_1) {
   // do_stuff_1 ;
   if (condition_2) {
      // do_stuff_2 ;
      show_hide = show_thing ;
   } else {
      // do_stuff_not_2 ;
   }
} else {
   // do_stuff_not_1 ;
}
show_hide(my_thing) ;

我认为您的第三种方法是三种方法中最好的——第一种方法有很多重复代码,而第二种方法可能会执行不必​​要的 UI 操作。但是选项 3 读起来有点混乱,因为 show_hide 变量是一个函数,而布尔值更直接。

这个怎么样:

// Approach 3
// Indirect show/hide
var should_show = false;

if (condition_1) {
   // do_stuff_1 ;
   if (condition_2) {
      // do_stuff_2 ;
      should_show = true;
   } else {
      // do_stuff_not_2 ;
   }
} else {
   // do_stuff_not_1 ;
}

if (should_show) {
    show_thing(my_thing);
} else {
    hide_thing(my_thing);
}