JavaScript ES6类是否违反函数式编程风格?

时间:2019-06-14 10:28:07

标签: javascript class ecmascript-6 functional-programming

我一直在不自觉地将功能性方法合并到我的JavaScript代码中,但是在某些方面仍然很难弄清楚。我对如何在不使用类的情况下管理某些不可变状态感到困惑。

例如,这是我使用过的一类:

isExplicitlyNonTransient(Throwable)

没有一个类方法会更改引用。

我的问题是,使用类是否是不良的函数式编程实践?如果是这样,标准的替代方法是什么?我可以考虑将ID作为每个函数的附加参数传递。我也调查过柯里。谢谢!

1 个答案:

答案 0 :(得分:0)

这取决于。您可以使用类来简化函数式编程。在这种情况下,oop代码成为实现细节。它也可以是一种优化技术,因为该类的所有实例都可以使用该类中函数的相同实例。

如果您想要纯正fp的语法简洁性,那么oop总是会给您带来麻烦,但是,如果您只是希望代码是可预测/可测试的,那么它就不必成为代码库中的主要范例。许多功能库都在后台使用类。

但是,您发布的代码对我来说就像是oop代码。为什么有_ref?该类只是噪音。唯一发生在这里的是

const getUserData = async (id) => {
    const data = await db.collection(..).doc(id);
    return data.map(doc => {
        // some transformation
    })
}

最好是

const getUserData = (id) => db.collection(..).doc(id)
    .then((data) => 
        data.map(doc => {
        // some transformation
        }
    );

请注意,您可以在promise类上使用.then方法,以避免命令式async / await语法