前端函数式演进
上QQ阅读APP看书,第一时间看更新

3.2.1 便捷地对过程反复包装

在JavaScript的前端函数式思维中,对过程进行反复包装的优势有二:首先函数式可以使用匿名函数,即没有锚的过程抽象;其次在函数式之外,我们可以利用语言特性实现一些元编程能力,比如模板能力、原型能力,这方便我们打破类型束缚和编译期限制。

元编程的语言能力没有指定的内容(在JavaScript中修改原型使用的是Ruby语言的Method_missing方法),甚至不是必选的,而且使用元编程还意味着纯函数会受到隐性的影响。但如果我们不能快捷地在运行时更改“方法”的运行方式,对过程编码的精简处理就会变得很烦琐。

更灵活的编程语言能力往往意味着更大的编码风险,不过函数式集中处理状态和副作用会帮助我们处理风险,甚至提高代码的稳定性。函数式的类型处理也更关注语言能力,这部分内容我们将在3.5节展开介绍。

代码清单3-1展示了过程的便捷封装以及封装后的方法在JSX中的使用。

代码清单3-1 过程的便捷封装及使用


// 对数组map的容错操作
const _map = (arr, func) => !!(arr && arr.length) && arr.map(func)

// JSX中的应用
{
  _map(items, group => {
    return (
      <div key={group.id} className="grid-row">
        {
          _map(group, x => ( <div key={x.id}>{x.name}</div> ))
        }
      </div>
    )
  })
}