在函数式编程中重用功能

时间:2018-04-25 05:56:16

标签: javascript functional-programming

比方说,我们在Nodejs中有一些框架,比如laravel。你有这样的事情:

class Model {
  getTable(){}
  edit(){let table = this.getTable();//edit...}
  insert(){}
  delete(){//some code}
}

另一个孩子班:

class User extends Model {
  getTable() { return 'users' }
}

这是OOP版本。我重用了编辑,插入和删除功能。

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

我更喜欢JavaScript for demo despide它不是完全FP语言。

谢谢

2 个答案:

答案 0 :(得分:1)

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

const createPerson = ( { create } ) => ( { name, age } ) => create ( {
  name: name.toLowerCase (),
  age: age <= 0 ? 1 : age
} )

const db = new Map()

const inc = ( () => {
   let i = 0
   
   return () => ++i

} ) ()

const createOps = db => ( {
    getById: id => db.get ( id ),
    create: data => ( db.set ( inc(), data ), data )
} )

// _createPerson is bound to a specific 
// data mapper so this function is already 
// agnostic to underlying tech if it's spread
// across the codebase
const _createPerson = createPerson ( createOps ( db ) )

const person = _createPerson ( { name: 'Matías', age: 33 } )

console.log ( person )

答案 1 :(得分:0)

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

如果您不熟悉函数式编程,我建议您在JS中查看tutorial关于FP的内容。

如果您不是新手,我建议您查看RamdaRxJS项目,这样您就可以了解如何实现可重用性。 提示:真正的可重用性来自monad的使用和大部分处理副作用。