Haskell代码去重优化:Maybe类型与条件分支的简化方案
优化Maybe类型分支代码,消除重复的ProcessB逻辑
方法一:使用带守卫的Case表达式
这是最简洁的实现方式,通过守卫(guard)将「Just包裹苹果且甜度达标」的条件合并到一个分支,其余所有情况(包括Nothing、Just但不甜的苹果)统一走默认分支执行ProcessB:
case fruit of Just apple | testSweet apple -> <ProcessA> _ -> <ProcessB>
方法二:先判断执行条件,再用单次If-Else
先提取出需要执行ProcessA的判断逻辑,再通过一次if-else分支完成处理,同样只保留一处ProcessB:
let shouldRunProcessA = case fruit of Just apple -> testSweet apple Nothing -> False in if shouldRunProcessA then <ProcessA> else <ProcessB>
方法三:利用Maybe类型的高阶函数(maybe)
Maybe类型自带的maybe函数可以简化空值处理,把判断逻辑嵌入到第二个参数中也能实现需求:
maybe <ProcessB> (\apple -> if testSweet apple then <ProcessA> else <ProcessB>) fruit
不过这种写法相比方法一稍显冗余,更推荐优先使用方法一的实现。
内容的提问来源于stack exchange,提问作者Shawn Zhang
相关产品推荐
相关产品推荐

