Pointfree {#pointfree}
Point-free是一种编程风格,这是一种在函数里面实际上没有写任何东西的函数编写方式,这种方式可以将一个函数与其他函数一起生成一个新的函数。我们可以把数据处理的过程定义成与数据无关的合成运算,不需要用到代表数据的那个参数,只要把简单的运算步骤聚合成一起,在使用这种模式之前我们需要定义一些辅助的基本运算函数,下面这个就是Pointfree
模式
- 不需要指明处理的数据
- 只需要合成运算过程
- 需要定义一些辅助的基本运算函数
const f = fp.flowRight(fp.toLower, fp.join('-'), fp.split(' '))
函数式编程的核心就是把运算过程抽象成函数,而Pointfree
模式就是把抽象出来的函数再合成成一个新的函数,这个合成有是一个抽象的过程,在抽象的过程中我们依然不需要关心数据, Point-free
模式来实现 AAA BBB ==> aaa-bbb
// point tree
const fp = require('lodash/fp')
const f = fp.flowRight(fp.replace(/\\s+/g, '-'), fp.toLower)
`console.log(f(['AAA BBBB']))
`
可以看出来Pointfree
实现模式其实就是函数组合
Pointfree 案例 {#pointfree-%E6%A1%88%E4%BE%8B}
用实现Point-free
模式来实现 word wild web ==> W. W. W.
- 第一步先用空格切割
- 把数组每一项转化成大些
- 取出每一项元素第一个字母
.空格
连接数组
const fp = require('lodash/fp')
const firstLetterToUpper = fp.flowRight(
fp.join(' '),
fp.map(fp.first),
fp.map(fp.toUpper),
fp.split(' ')
)
//
`console.log(firstLetterToUpper('word wild web')) // W. W. W
`
这个是否发现我们循环了两次,根据函数结合律我们可以在map里面把转化大写和取第一个字母方法合并
const firstLetterToUpper = fp.flowRight(
fp.join('. '),
fp.map(fp.flowRight(fp.first, fp.toUpper)),
fp.split(' ')
)
`console.log(firstLetterToUpper('word wild web')) // W. W. W
`