我们可以在函数式编程中将对象传递给函数参数吗?

Can we pass objects to function parameters in functional programming?

我在日常工作中主要编写面向对象的代码,对函数式编程的经验很少。

在JavaScript/typescript代码中,我们绝对可以将对象作为参数传递给函数。我的问题是将对象传递给函数是否违反了函数式编程范例,因为我将面向对象的代码与函数式编程混合在一起。 (即使传递给函数的对象没有发生变化)。

例如,如果我有一个函数 f(x,y) => z,其中 x 是一个定义某些接口的对象。对象 x 进行网络调用以访问某些用于计算 z 的资源。可以说,这样的函数虽然在函数参数中混入了OO代码,但依然秉承了函数式编程的无副作用、纯粹的理念 ?

希望我的问题很清楚。

if I have a function f(x,y) => z where x is an object that defines some interface. Object x makes a network call to access some resource which is used to compute z.

如果 x 进行网络调用并使用结果计算 z,那么它(根据大多数定义)是​​ non-deterministic(因为它执行 I/O)并且因此不是 pure function. This further means that f is impure, too. I don't consider that FP. Rather, it's an attempt at Dependency Injection.

但这并不意味着您不能将 'data structures' 作为参数传递 - 它们只需要是不可变的或其他纯函数即可。

相反,如果对象 x 实现了定义纯函数(例如算法)的接口,您可以将其作为参数传递,使用纯函数,以及使用 'object'可能还是纯的