让我们来看一个遵循命令式模型的“ calculatePrice”函数的实现:
const calculatePrice = (price, tax, discount) => {const priceWithTaxes = withTaxes(tax, price);if (isError(priceWithTaxes)) {return console.log('Error: ' + priceWithTaxes.message);}const priceWithTaxesAndDiscount = withDiscount(discount, priceWithTaxes);if (isError(priceWithTaxesAndDiscount)) {return console.log('Error: ' + priceWithTaxesAndDiscount.message);}console.log('Total Price: ' + priceWithTaxesAndDiscount);}//我们计算出价值25的产品(含21%的增值税和10%的折扣)的最终价格 。calculatePrice(25, 0.21, 0.10)
现在,让我们了解如何使用Either Monad重写此函数 。
都有两个构造函数,Left和Right 。我们要实现的是将异常存储到Left构造函数,并将正常结果(快乐路径)存储到Right构造函数 。
首先,将更改已经存在的withTaxes和withDiscount函数,以便在出现错误时它们返回Left,在一切正常的情况下返回Right:
const withTaxes = Ramda.curry((tax, price) => {if (!_.isNumber(price)) {return RamdaFantasy.Either.Left(new Error("Price is not numeric"));}return RamdaFantasy.Either.Right(price + (tax * price)); });const withDiscount = Ramda.curry((dis, price) => {if (!_.isNumber(price)) {return RamdaFantasy.Either.Left(new Error("Price is not numeric"));}if (price < 5) {return RamdaFantasy.Either.Left(new Error("Discounts not available for low-priced items"));}return RamdaFantasy.Either.Right(price - (price * dis)); });
然后,我们为Right案例创建一个函数(显示价格),为Left案例创建另一个函数(显示错误),然后使用它们创建Either Monad:
const showPrice = (total) => { console.log('Price: ' + total) }; const showError = (error) => { console.log('Error: ' + error.message); }; const eitherErrorOrPrice = RamdaFantasy.Either.either(showError, showPrice);
最后,只需要执行Monad来计算最终价格:
//计算出价值25的产品(含21%的增值税和10%的折扣)的最终价格 。eitherErrorOrPrice(RamdaFantasy.Either.Right(25).chain(withTaxes(0.21)).chain(withDiscount(0.1)))
结论:JavaScript中的函数式编程正如我们所看到的,一旦用Maybe和Either单子分解了代码,就没有那么复杂了 。如果使用得当,它们可以使我们的代码更易于阅读和维护 。
【foreach跳出本次循环 js判断空对象的方法】唯一的不便是我们需要克服的初始障碍,但这可以通过在网上一些示例并进行一些测试来完成 。
推荐阅读
- 本次题目蒸花卷时怎样让葱花翠绿而不变黄
- 伊苏8跳出解决办法分享 伊苏8游戏一直跳出怎么办
- 《孤岛惊魂:原始杀戮》游戏老是跳出输入法问题解决方法解析攻略
- 孤岛惊魂原始杀戮破解版雪地跳出怎么解决?
- 天命奇御2黑屏卡死怎么办 跳出黑屏打不开问题解决方法汇总
- 《孤岛惊魂3》解决黑屏和崩溃跳出方法
- 2022宜兴事业单位考试地点
- 《群星》军事基地跳出解决方法
- 《群星》造要塞跳出解决心得分享
- 哪套外观在5天的投票角逐中胜出成为本次第三期战令解锁外观 天涯明月刀手游3月11日每日一题答案