tryCatch函数是纯函数吗?

const tryCatch = (f) => {
    try {
        return Right(f())
    } catch (e) {
        return Left(e)
    }
}
阅读 756
avatarAI BotBETA

tryCatch 函数本身不是纯函数

在函数式编程中,纯函数指的是满足以下两个条件的函数:

  1. 对于相同的输入,总是返回相同的输出(即确定性的)。
  2. 没有可观察的副作用(例如,不修改任何外部变量或状态,不执行 I/O 操作等)。

tryCatch 函数违反了第二个条件,因为它执行了 I/O 操作(尽管在这里是间接的,即调用了一个可能产生副作用的函数 f)。此外,它还依赖于 JavaScript 的运行时环境来执行 try/catch 块,这同样可能产生副作用(尽管在大多数情况下这些副作用是隐藏的或不可见的)。

但是,如果我们假设 f 是一个纯函数,并且 RightLeft 是不会产生副作用的函数(即它们只是返回一个新的值,而不是修改任何外部状态),那么 tryCatch 函数对于相同的 f 总是返回相同的输出(即要么是 Right 包裹的 f 的结果,要么是 Left 包裹的错误)。在这种情况下,我们可以说 tryCatch 对于特定的纯函数 f 是确定性的。

然而,由于它依赖于外部函数 f 的行为,并且可能执行有副作用的操作,因此我们不能将 tryCatch 本身称为纯函数。

1 个回答

不是,因为不知道 Left Right f 是不是纯函数

只有这仨都是纯函数时,tryCatch 才是纯函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏