您有一系列函数要执行。案例A:它们不依赖彼此。其中哪一个更好?

function main() {
  a();
  b();
  c();
}

或者

function main() {
  a();
}

function a() {
  ...
  b();
}

function b() {
  ...
  c();
}

案例B:它们确实取决于成功完成。

function main() {
  if (a())
    if (b())
      c();
}

或者

function main() {
  if (!a()) return false;
  if (!b()) return false;
  c();
}

或者

function main() {
  a();
}

function a() {
  ... // maybe return false
  b();
}

function b() {
  ... // maybe return false
  c();
}

当然,更好的是,意味着更容易维护和易于遵循。

有帮助吗?

解决方案

案例A:1。
推理:由于这些功能都不取决于彼此,因此在Main中按顺序调用它们,显示了事件的逻辑序列。您在每个功能末尾称呼下一个的替代方案,看起来像意大利面条代码,很难让阅读您的程序遵循。

案例B:以上都不是。

function main() {
    return a() && b() && c();
}

推理:看来您并不真正在乎回报值,如果其中一个功能返回一定值,您只想尽早突破即可。您可以返回所有这些功能的“ ANDED”结果,如果其中任何一个返回错误,则代码将尽早爆发。因此,如果返回false,则不会执行。将所有这些都放在一行上很容易阅读,并简单地表明它们彼此依赖。

其他提示

案例A:第一个选项

如果您使用第二个选项,则使重复使用A更加困难,因为您会自动拉入B和C。

案例B:依赖 - a,b和c返回布尔值自然或其他值得检查的值?我仍然不会打电话b和b呼叫C,因为那时您会引入不必要的依赖性。如果返回值很有意义,我倾向于选项2-更少的嵌套是一件好事。

首先,最好的答案将取决于代码所在的上下文中的多个方面 - 没有人 回答“取决于”。

但是,以面值为单位,案例A:

选项1显示算法的顶级视图。

选项2隐藏了这一点,对B&C的电话隐藏了。发现C被称为C,这可能是很多工作。另外,如果他们调用进一步的方法,则很难孤立地测试A&B。如果可以模拟A,B和C,则可以始终测试MAIN。

案例B:对于方法中有1个出口点与多个出口点有参数。有时,多个出口点可以使代码变得更简单,这使其更加可维护,而其他时候则不明显回报产生了什么影响,或者会发生回报,从而使其可维护效果降低。

选项1明确显示该算法,但是如果可以快速失控,则多个嵌套。在这种情况下,我肯定有选项2或一些聪明的布尔式变体(是的,Corey)。

选项3看起来很钝我。

案例A:第一个选项

案例B:第二选项

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top