函数式编程

函数式编程

  1. 函数是一等公民,函数式的思想来源于数学运算,而柯里化的操作可以将多参函数转为单参函数,而单参函数一般希望是纯函数(即不存在副作用的函数),可以实现f(g(x))这样的合并操作的函数(通过队对外接口map方法实现变形),函数式的核心思想是基于函数或者说函子进行计算。
  2. 函子(即容器,一般拥有基本数据和map接口),函数式一般规定使用of来替换new操作

Maybe函子:可以对空值等问题进行检测:

class Maybe extends Functor {
  map(f) {
    return this.val ? Maybe.of(f(this.val)) : Maybe.of(null);
  }
}

Either函子:替换if...else,可以用于提供默认值,还有替换掉try...catch.

class Either extends Functor {
  constructor(left, right) {
    this.left = left;
    this.right = right;
  }

  map(f) {
    return this.right ? 
      Either.of(this.left, f(this.right)) :
      Either.of(f(this.left), this.right);
  }
}

Either.of = function (left, right) {
  return new Either(left, right);
};

ap函子:部署了ap方法的函子,当想要基于另一个函子内部的值进行计算时使用,相当于可以进行链式调用。

class Ap extends Functor {
  ap(F) {
    return Ap.of(this.val(F.val));
  }
}

Monad函子:拥有一个flatMap方法,总是返回一个单层的函子,意思是把嵌套的函子铺平。

//这里应该才两层嵌套
class Monad extends Functor {
  join() {
    return this.val;
  }
  flatMap(f) {
    return this.map(f).join();
  }
}
//函数式在IO操作中的应用(将不纯的函数保装成纯函数来实现):

var tail = function(x) {
  return new IO(function() {
    return x[x.length - 1];
  });
}

readFile('./user.txt')
.flatMap(tail)
.flatMap(print)

// 等同于
readFile('./user.txt')
.chain(tail)
.chain(print)
posted @   梦呓qwq  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示