【问题标题】:Is Javascript LBYL or EAFP? [closed]Javascript LBYL 还是 EAFP? [关闭]
【发布时间】:2020-06-11 19:24:18
【问题描述】:

有两种编程方法:EAFP(请求宽恕比许可更容易)和 LBYL(跳前检查)。第一种方法假定做一些可能导致异常的事情,然后处理这个异常,第二种方法假定使用if 语句。 Javascript 是 EAFP 还是 LBYL

【问题讨论】:

  • 提出的问题毫无意义:JavaScript 作为一种编程语言,不是一种编程方法。如何使用 JavaScript 进行编程完全取决于您。您可以选择先检查所有内容,也可以选择“做某事并捕获任何抛出的异常”。
  • @meriton 我问了这个问题,因为许多编程语言都有一定的方法。例如,Python 肯定是 EAFP,而 C/C++ 是 LBYL
  • 我完全同意这个问题。发现javascript没有好的错误系统后,答案显然是LBYL。

标签: javascript code-structure


【解决方案1】:

this reddit post 的最佳答案很好地总结了我对此的看法,但我会给出我的 2 位。

在跳跃之前一定要先看。

考虑一下这段代码。

const thing = {};

try {
  thing.forestryServices.apply();
}
catch (e) {
  console.log(e);
}

thing.forestryServices = {
  apply: "surprise goombas"
}

try {
  thing.forestryServices.apply();
}
catch (e) {
  console.log(e);
}

在这两种情况下返回的错误都是错误类型的对象。尝试从这些错误中恢复比提前进行必要的检查以确保您的对象对于您尝试对其执行的操作有效要困难得多。

【讨论】:

  • 没有什么可以阻止 JavaScript 函数返回特定错误,调用者可以使用这些错误以特定方式处理错误。此外,有时可以通用地处理错误,而无需知道事情到底是如何出错的。 Promise 和 rxjs 都支持错误参数是有原因的...
  • 当然,但我的代码示例中的错误都是核心 JavaScript 错误。一个是“属性 apply 在 undefined 上不存在”,另一个是“apply 不是函数”。但两者的数据类型都是错误。
猜你喜欢
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多