免点调试
Point free debugging
所以我们在工作中使用了非常好的 ramda 库,这很棒,因为我们能够使用基本上无点的代码风格。这样做的问题是,当出现问题时,指向我们代码中某些东西的地方要少得多;大多数 运行 时间错误的发生是因为误用了组合的 ramda 函数。将其与将这些函数传递给使用大量重定向的框架相结合(我们在 react/redux),并且通常当出现问题时,它深藏在仅库代码中,并且很难找出位置我错了。
有没有什么方法可以在不脱离无点风格的情况下缓解这个问题?
我 运行 在我的业余项目中遇到了与 Ramda 相同的问题。这就是让我暂时放弃生产的原因。
截至撰写此答案时,在 JavaScript 中调试无点式程序非常困难甚至不可能。这是我不使用它的唯一原因。即使有很好的单元测试覆盖率,我也发现开发周期太长,调试也很困难。
我将对此进行扩展:虽然存在像 Ramda-debug 和 R.tap()
这样的工具,但它们是活跃的调试工具,您需要将其添加到您的项目中,在某些情况下,添加到您的代码中并在以后的生产中删除。但是,当您收到错误消息时,您无法获得有用的堆栈跟踪,并且无法在调试器中单步执行以找出流程,您需要提前了解流程。
一种选择是使用 R.tap
,像这样:
const f = R.pipe(
R.tap(console.log), // logs x
g,
R.tap(console.log), // logs g(x)
h,
R.tap(console.log), // logs h(g(x))
i,
R.tap(console.log), // logs i(h(g(x)))
j,
R.tap(console.log) // logs j(i(h(g(x))))
);
f(x);
另一种选择是使用 Sanctuary,当函数应用于错误类型的参数时会引发信息性异常。
所以我们在工作中使用了非常好的 ramda 库,这很棒,因为我们能够使用基本上无点的代码风格。这样做的问题是,当出现问题时,指向我们代码中某些东西的地方要少得多;大多数 运行 时间错误的发生是因为误用了组合的 ramda 函数。将其与将这些函数传递给使用大量重定向的框架相结合(我们在 react/redux),并且通常当出现问题时,它深藏在仅库代码中,并且很难找出位置我错了。
有没有什么方法可以在不脱离无点风格的情况下缓解这个问题?
我 运行 在我的业余项目中遇到了与 Ramda 相同的问题。这就是让我暂时放弃生产的原因。
截至撰写此答案时,在 JavaScript 中调试无点式程序非常困难甚至不可能。这是我不使用它的唯一原因。即使有很好的单元测试覆盖率,我也发现开发周期太长,调试也很困难。
我将对此进行扩展:虽然存在像 Ramda-debug 和 R.tap()
这样的工具,但它们是活跃的调试工具,您需要将其添加到您的项目中,在某些情况下,添加到您的代码中并在以后的生产中删除。但是,当您收到错误消息时,您无法获得有用的堆栈跟踪,并且无法在调试器中单步执行以找出流程,您需要提前了解流程。
一种选择是使用 R.tap
,像这样:
const f = R.pipe(
R.tap(console.log), // logs x
g,
R.tap(console.log), // logs g(x)
h,
R.tap(console.log), // logs h(g(x))
i,
R.tap(console.log), // logs i(h(g(x)))
j,
R.tap(console.log) // logs j(i(h(g(x))))
);
f(x);
另一种选择是使用 Sanctuary,当函数应用于错误类型的参数时会引发信息性异常。