[Javascript] Improve Composition with the Compose Combinator

To make our composition more readable and easier to name we are going to ceate a compose function we can use to avoid having to manually nest our transducer calls.

We'll also go over semantically naming your compose functions for extra readability.

 

Nested style:

import {doubleTheNumber, evenOnly} from "../utils";

const map = xf => reducer => {
  return (accumulation, value) => {
    return reducer(accumulation, xf(value));
  };
};

const filter = predicate => reducer => {
  return (accumulation, value) => {
    if (predicate(value)) return reducer(accumulation, value);
    return accumulation;
  };
};

const isEvenFilter = filter(evenOnly);
const isNot2Filter = filter(val => val !== 2);

const doubleMap = map(doubleTheNumber);

const pushReducer = (accumulation, value) => {
  accumulation.push(value);
  return accumulation;
};

[1,2,3,4].reduce(isNot2Filter(isEvenFilter(doubleMap(pushReducer))), []);

 

 

Compose function:

import {filter, map, evenOnly, doubleTheNumber} from "../utils";

const doubleMap = map(doubleTheNumber);
const isEvenFilter = filter(evenOnly);
const isNot2Filter = filter(val => val !== 2);
const pushReducer = (accumulation, value) => {
  accumulation.push(value);
  return accumulation;
};

[1, 2, 3, 4].reduce(isNot2Filter(isEvenFilter(doubleMap(pushReducer))), []);

// compose(f,g)(x) === f(g(x));
//
// compose(isNot2Filter, isEvenFilter, doubleMap)(pushReducer) ===
// isNot2Filter(isEvenFilter(doubleMap(pushReducer)));

const compose = (...functions) =>
  functions.reduce((accumulation, fn) =>
    (...args) => accumulation(fn(...args)), x => x);

[1, 2, 3, 4].reduce(
  compose(isNot2Filter, isEvenFilter, doubleMap)(pushReducer),
  [],
); /*?*/

 

转载于:https://www.cnblogs.com/Answer1215/p/8297876.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用docker-compose进行部署是一种方便的方式,可以通过定义一个YAML文件来描述多个容器的配置和关系,然后使用docker-compose命令来启动、停止和管理这些容器。 以下是使用docker-compose进行部署的一般步骤: 1. 安装Docker和docker-compose:首先需要在部署机器上安装Docker和docker-compose。可以根据操作系统的不同,选择合适的安装方式。 2. 创建docker-compose.yml文件:在项目的根目录下创建一个名为docker-compose.yml的文件,并在其中定义需要部署的服务和容器。可以指定容器的镜像、端口映射、环境变量等配置信息。 3. 编写Dockerfile(可选):如果需要自定义容器的镜像,可以在项目中为每个服务编写一个Dockerfile文件,用于构建自定义镜像。Dockerfile中可以指定所需的软件包、依赖项和配置。 4. 启动容器:使用docker-compose命令启动容器。在项目根目录下执行`docker-compose up`命令,docker-compose会根据配置文件创建并启动所有定义的服务和容器。 5. 管理容器:使用docker-compose命令可以方便地管理容器。例如,可以使用`docker-compose stop`命令停止容器,使用`docker-compose start`命令启动已停止的容器,使用`docker-compose restart`命令重启容器等。 6. 扩展和更新:可以根据需要扩展和更新容器。可以通过修改docker-compose.yml文件来添加新的服务或容器,然后使用`docker-compose up`命令重新启动容器。 7. 清理和停止:如果不再需要部署的容器,可以使用`docker-compose down`命令停止并删除所有容器。这将清理所有相关的网络、卷和镜像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值