After understanding how Box is, then we are going to see how to use Box to refacotr code, to un-nested expression.

For example, we have code:

const moneyToFloat = str => {
const cost = str.replace(/\$/g, '');
return parseFloat(cost);
} const percentToFloat = str => {
const cost = parseFloat(str.replace(/\$/g, ''));return cost * 0.01;
} const applyDiscount = (price, prec) => {
const cost = moneyToFloat(price);
const p = percentToFloat(prec);
return cost - cost * p;
} const result = applyDiscount('$5.00', '20%')
console.log(result) //

So how it would be when we using Box version:

const moneyToFloat = str => {
const cost = str.replace(/\$/g, '');
return parseFloat(cost);
} const moneyToFloat = str =>
Box(str)
.map(s => s.replace(/\$/g, ''))
.map(s => parseFloat(cost))

Well, nothing really impress here, we put 'str' into Box, and using map to do all the logic.

const percentToFloat = str => {
const cost = parseFloat(str.replace(/\$/g, ''));
return cost * 0.01;
} const percentToFloat = str =>
Box(str.replace(/\$/g, ''))
.map(s => parseFloat(s))
.map(s => s * 0.01)

This part, notice we un-nest 'parseFloat(str.replace(...))', make logic more readable by using map.

const applyDiscount = (price, prec) => {
const cost = moneyToFloat(price);
const p = percentToFloat(prec);
return cost - cost * p;
} const applyDiscount = (price, prec) =>
moneyToFloat(price)
.fold(cost => percentToFloat(prec)
.fold(p => cost - cost * p))

Notice here, because 'moneyToFloat' return a Box, so we are able to chain map on that.

And 'cost', we can use clouse to remember 'cost', and chain 'fold' on precentToFloat. The reason we use 'fold' instead of 'map', is 'fold' we can get value out of Box.

const Box = x =>
({
map: f => Box(f(x)),
fold: f => f(x),
toString: () => `Box(${x})`
}) const moneyToFloat = str =>
Box(str)
.map(s => s.replace(/\$/g, ''))
.map(s => parseFloat(cost)); const percentToFloat = str =>
Box(str.replace(/\$/g, ''))
.map(s => parseFloat(s))
.map(s => s * 0.01); const applyDiscount = (price, prec) =>
moneyToFloat(price)
.fold(cost => percentToFloat(prec)
.fold(p => cost - cost * p)) const result = applyDiscount('$5.00', '20%')
console.log(result) //

最新文章

  1. Windows无法安装到这个磁盘。请确保在计算机的BIOS菜单中启用了磁盘控制器
  2. 基于XML的AOP配置-转
  3. 常用邮箱的服务器(SMTP/POP3)地址和端口总结
  4. pod 安装 Masonry 遇到问题
  5. C# 网络通信基础 总结
  6. 高斯消元与xor方程组
  7. ubuntu禁用笔记本自带键盘
  8. Java从入门到精通(一)
  9. printf 格式化最常用用法
  10. netbeans字体与颜色配置模板相关网站
  11. Swift - 文本输入框内容改变时响应,并获取最新内容
  12. [转]Libev教程
  13. 配置jboss4.2.3GA启用SSL
  14. 浅谈游戏中BOSS设计的思路
  15. OpenCV探索之路(二十三):特征检测和特征匹配方法汇总
  16. hrbust1140 数字和问题
  17. chrome 安装setupvpn 解决chorme未能成功加载扩展程序的问题
  18. 【jvm】windows下查看java进程下多线程的相关信息
  19. python基础之 面向对象之反射
  20. The logback manual #01# Introduction

热门文章

  1. 信号 signal sigaction补充
  2. Swift具体解释之三----------函数(你想知道的都在这里)
  3. vim-大小写装换
  4. 19.Node.js EventEmitter
  5. mahout用到的典型测试数据集
  6. 1.26 Python知识进阶 - 继承
  7. ORA-16047: DGID mismatch between destination setting and standby
  8. Android实现点击通知栏后,先启动应用再打开目标Activity
  9. BZOJ 4555 [Tjoi2016&Heoi2016]求和 (多项式求逆)
  10. hdu5384 AC自己主动机模板题,统计模式串在给定串中出现的个数