Javascript 函数式编程中的功能重用

Javascript 函数式编程中的功能重用,javascript,functional-programming,Javascript,Functional Programming,比如说,我们在节点中有一些框架,比如laravel。你有这样的东西: class Model { getTable(){} edit(){let table = this.getTable();//edit...} insert(){} delete(){//some code} } 另一个儿童班: class User extends Model { getTable() { return 'users' } } 这是OOP版本。我重复使用编辑、插入和删除功能 如何通过

比如说,我们在节点中有一些框架,比如laravel。你有这样的东西:

class Model {
  getTable(){}
  edit(){let table = this.getTable();//edit...}
  insert(){}
  delete(){//some code}
}
另一个儿童班:

class User extends Model {
  getTable() { return 'users' }
}
这是OOP版本。我重复使用编辑、插入和删除功能

如何通过函数式编程实现重用功能

我更喜欢JavaScript演示,尽管它不是完全的FP语言


谢谢你

你给出的例子有点不幸,因为该类中的所有方法都是与IO相关的副作用方法。所有这些方法正是您将保留到处理结束时的方法,以便将它们与无副作用的功能隔离开来

如果您是函数式编程新手,我建议您检查一下JS中的FP


如果您不是新手,我建议您检查和项目,这样您就可以了解如何实现可重用性提示:真正的可重用性来自于单子的使用,并且大部分处理都没有副作用。

另一个原因似乎是,使用部分应用程序可以获得可重用性

constcreatePerson=({create})=>({name,age})=>create({
名称:name.toLowerCase(),
年龄:年龄{
设i=0
return()=>++i
} ) ()
const createOps=db=>({
getById:id=>db.get(id),
创建:data=>(db.set(inc(),data),data)
} )
//\u createPerson绑定到特定的
//数据映射器,因此此函数已经
//不可知的基础技术,如果它的传播
//跨越代码库
const_createPerson=createPerson(createOps(db))
const person=_createPerson({姓名:'Matías',年龄:33})

console.log(person)
这个q太宽泛了。无论如何,你可以在FP中重用函数,因为它们是全局的、通用的、第一类的,并且通常是多态的。我想说,与类/子类型相比,从数据中分离功能会增加更多的可重用性。是的,但是我如何重写方法。例如,在OOP中是:class User{edit(){…}。在FP中,我应该在一个函数中编写所有不同的行为:函数编辑(模型){如果(模型是用户){}如果(模型是图片)}?不是很糟糕吗?通常,您会为每个行为/类型编写一个函数,并依赖于一种机制,该机制要么在运行时为给定类型分派正确的函数,要么静态解析函数/类型映射。在Javascript中,您可以使用原型系统,要么利用Javascript的内省功能构建自己的重载是的。但同样,你的问题太广泛了,无法得到正确的答案。谢谢,但prototpe不是面向对象的方式吗?我想使用Haskell这样的函数式编程。你能用Javascript给出没有类的例子吗?你有方法为“save”的基本模型和方法为“save”的用户模型方法将模型保存在文件系统而不是数据库中。如何在fp中覆盖该模型。感谢可能重复的我知道,但实际上90%的方法都有IO(副作用)。想象一下“编辑”方法没有副作用,如何将代码翻译成FP@user2693928如果您希望重用的大多数方法都会产生副作用,例如
edit
,我很抱歉,但您运气不好。对于您的情况,我会选择进行所有修改(最大可能)以功能性的方式,然后使用repository模式将修改后的对象保存到DB中。无论如何,Haskell中也会有完全相同的问题,情况也是一样。谢谢你,但repository模式不是面向OOP的吗?@user2693928这是一种模式。许多OOP模式在FP世界中都有其等价物。但在任何cas中都是如此e、 我给了你我会选择的选项。如果你不想使用存储库模式,而是想实现一个将数据保存到数据库中的副作用函数,那就去做吧。问题是你不能逃避副作用部分,这就挖掘了你重用代码的可能性(至少,以你想要的方式).90%具有IO的函数是不寻常的现实,即使对于JavaScript也是如此(除非它是一个非常简单的JS)。在FP中,您不编辑对象,而是创建对象的修改副本。@user2693928甚至还有其他选择,比如使用
Reader