使用逻辑等值演算简化代码

情景: 记录数组中的最大值。
思路: 使用 last 来存放之前的最大值,使用 new 表示新的值,通过判断两者的大小来决定是否更新最大值 last

  • 最直接
// 如果 last 为空,或者 last 小于 new 的时候更新
if last == nil || (last != nil && new > last) {
    last = new
}
复制代码

n 个条件,对应2^n 个分支

上面的表达式中,实际上描述了 2^2 = 4 个分支中的 3 个,因此可以通过最后一个分支的逻辑非来简化:

  • 逻辑非
// 如果 last 不为空,且大于 new,就无需更新。取逻辑非就是需要更新。
if !(last != nil && new <= last) {
    last = new
} 
复制代码

基于语言的一些语法特性,我们在代码里更常见的是 占位法

  • 占位法
// 回顾更新数据的条件:last == nil || new > last
// 将 last == nil 的情况改成能使第二个式子:new > last 恒成立的方式,实现两个命题的整合。
if new > last ?? MIN { // MIN 是一个一定比 new 小的值
    last = new
}
复制代码

转载于:https://juejin.im/post/5a404377f265da43333e9f67

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值