《javascript函数式编程指南》读书笔记二

2019-06-25  本文已影响0人  月半女那

第二部分函数基础部分

1. 轻数据结构,重操作

1.1. 控制流

控制流:程序为实现业务目标所要进行的路径
使用函数式开发其实就是将数据与控制流视为一些高级组件的简单链接

1.2. 链接方法

方法链式一种能够在一个语句中调用多个方法的面对对象编程模式。方法链又称方法级联

1.3. 函数链

函数式编程不是通过创建一个全新的数据结构类型来满足特定的需求,而是使用如数组这样的普通类型并施加在一套粗粒度的高阶操作之上。
设计思路

function filter(arr, predicate) {
  let idx = -1,
    len = arr.length,
    result = [];
  while (++idx < len) {
    let value = arr[idx];
    if(predicate(value,idx,this)){ // 这里是指定this的作用域对象(window)
        result.push(arr[idx])
    }
  }
  return result
}

console.log(filter([1,2,3,4], a=> a>2)) // [3,4]
1.4. 代码推理

函数式的控制流能给个不需要研究任何内部细节的条件下提供该程序意图的清晰结构,这样可以知道数据在不同阶段式如何流入和流出的
函数式编程在理论上讲,无论是使用数组,链表,二叉树,还是其他数据结构,都不会改变程序原来的语义。所以函数式编程更关注于操作而不是数据结构

_.chain
创建一个lodash包装实例,包装value以启用显式链模式。要解除链必须使用 _#value 方法。
let students = ['Rosser', 'Turing', 'Kleene', 'Church'];
const chain = _.chain(students).value()
console.log(chain) //[ 'Rosser', 'Turing', 'Kleene', 'Church' ]
function voms(string){
    return _.filter(string, e=> /[aeiou]/i.test(e));
}

_.mixin({'voms':voms});

console.log(_.voms('fres')) // ['e']

递归定义的数据结构
节点是一种包含了当前值,父节点和子节点数组的对象。如果一个节点没有父节点则被称之为根节点
树是包含了一个根节点的递归定义的数据结构
函数式编程的关键
在操作不可变,无副作用的数据类型时,封装数据以控制其访问

上一篇下一篇

猜你喜欢

热点阅读