0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

不会有人不知道怎么优雅的替换if-else语句吧

5jek_harmonyos 来源:CSDN 作者:饭一碗 2021-07-28 15:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来自:love1024.blog.csdn.net/article/details/104955363

场景日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序“猿”,看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段:

优先判断条件,条件不满足的,逻辑及时中断返回;

融入策略模式;

策略模式+工厂+单例模式,锦上添花;

接下来先附上一段很久以前自己写的业务代码,核心逻辑就是在支付回调中根据用户购买的价格包赋予用户对应的权益(VIP视频会员天数+抽奖机会次数)。我的天,太多if-else了……(看不清楚可以点击图片放大)

b20b1b9e-ecdb-11eb-a97a-12bb97331649.png

1.优先判断条件,不满足及时中断

这点非常容易理解,就是说在业务逻辑里面,先把不符合条件的给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下:

b493bb28-ecdb-11eb-a97a-12bb97331649.png

b51b978c-ecdb-11eb-a97a-12bb97331649.png

2.策略模式改造

先用策略模式替换掉文章开头讲到的,用户充值后根据价格包(付的多少钱)给用户增加VIP天数及抽检机会次数的逻辑,我这里就简化成“根据-价格包区分给用户增加不同的体育会员视频VIP天数”这个动作来讲解:

b52a462e-ecdb-11eb-a97a-12bb97331649.png

b83ace38-ecdb-11eb-a97a-12bb97331649.png

b8500ce4-ecdb-11eb-a97a-12bb97331649.png

b85e8ff8-ecdb-11eb-a97a-12bb97331649.png

b87995dc-ecdb-11eb-a97a-12bb97331649.png

表面上看,代码稍微优雅了点,但是还是没和if-else彻底说拜拜,且recharge()充值方法可单独拎出来,只需要根据priceCode实例化不同的策略对象即可:

b898b7d2-ecdb-11eb-a97a-12bb97331649.png

3.策略模式+工厂+单例模式,锦上添花

接下来使用“工厂类+单例”来给代码加点料:

b8a4a240-ecdb-11eb-a97a-12bb97331649.png

b8d5258c-ecdb-11eb-a97a-12bb97331649.png

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发
    +关注

    关注

    0

    文章

    380

    浏览量

    42257

原文标题:三种方式,教你优雅的替换if-else语句!

文章出处:【微信号:harmonyos_developer,微信公众号:harmonyos_developer】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AD9363杂散超标什么原因

    使用AD9363发射时,在发射频率2M处会有杂波情况,在1.6G以下,能勉强过60DB的认证标准, 但在1.6G以上,只有58DB,达不到认证标准。具体测试情况如以下图片所示,电源和时钟都做了相关优化, 没有改善.不知道不会
    发表于 05-15 07:01

    请问根据ADI芯片上面的丝印,如何知道它具体是哪颗物料呢?

    您好: 如题。我想查几个运放芯片,只知道是ADI的,知道丝印,那我如何知道它具体是哪颗物料呢? 丝印分别为: 30325 N7026 LT8G 833 2051 LAEU 8950 028 像某个芯片厂家,官网
    发表于 05-15 06:33

    没有将下图中给出的外部跟踪从 CDD_CORE / VOUT_CORE 到 VDD_CORE,会有什么问题?

    可以工作,但射频输出错误。 在某些情况下,例如低于 2.5V,MCU 会完全停止发送数据,我们可以看到大约 7/8/9/12mA 的恒定功耗。 我无法理解,因为当我们降压或低电压时,也会出现这种情况。 KW45B41Z-EVK KW45 BLE-NFC 的   会不会有任何问题或两者内部连接的引脚
    发表于 04-24 06:49

    组合导航不知道怎么选,看这里

    单一导航难适配复杂作业?MEMS组合导航来帮你,通过融合卫星定位与惯性测量技术,以“1+1>2”优势破解全行业导航难题。 我司组合导航提供三种方案可选,从01到03到05,搭载从导航级到战术级到消费级MEMS陀螺仪与加速度计,通过微机电技术集成在毫米芯片上,搭载卫星模块以及其他器件,尺寸仅有65mm*70mm*45.5mm,以下是三种方案详细介绍: 超高精度方案—ER-GNSS/MINS-01 产品定位 一款拥有测绘级超高精度的组合导航,是市面上采用MEMS技术组合导航系统中
    的头像 发表于 01-08 15:47 413次阅读

    工业数据“采了白采”?有人物联网藏着采集+分析的全套打法

    不少工厂老板都有过这种无奈:花几万块装了工业设备数据采集设备,买了数据采集软件,最后却只干了件 “存硬盘” 的活——产线数据堆了几百G,既不知道能干嘛,也不会分析,活生生把 “金矿”当成了“垃圾
    的头像 发表于 12-23 17:45 614次阅读

    条件的执行语句

    销毁,因此条件执行是无效的。 因此,保持if和else语句尽可能简单是十分有益处的,因为这样编译器可以 集中处理它们。关系表达式应该写在一起。 下面的例子展示编译器如何使用条件执行: int
    发表于 12-12 08:25

    断电时,你的后备电源真能启动吗?多数人不知道的UPS保养真相

    断电那一刻,你的后备电源真的能顶上吗?深夜,机房警报突然响起,屏幕瞬间熄灭——不是演习,市电真的断了。所有人的心都提到了嗓子眼,三秒后,服务器指示灯重新亮起,UPS电源的显示屏稳定地闪烁着运行
    的头像 发表于 12-05 13:37 2022次阅读
    断电时,你的后备电源真能启动吗?多数<b class='flag-5'>人不知道</b>的UPS保养真相

    为什么ADA4530-1运放总是坏?

    这个运放的时候没注意到GRD是做保护环用的,所以直接接了地,但是这应该只会导致没有屏蔽漏电流的效果,不会道址运放总是坏不知道是什么原因,我用这个运放的时候是处在一个激光周围,因为我要把激光打在
    发表于 11-28 16:15

    请问e203_exu_csr模块里同时读写csr寄存器会不会有问题?

    模块里的寄存器是用的sirv_gnrl_dfflr,同时读写的话,读到的是新写进去的值。csrrw这种指令会有问题 可能csrr csrw这种用法把这个问题掩盖了。我没环境验证这个问题,只是自己在做csr寄存器的时候遇到了这个问题,所以想问下
    发表于 11-06 08:12

    现在流行来中国看赛博朋克

    中国以外的人不知道中国有多强
    的头像 发表于 10-10 22:43 4691次阅读
    现在流行来中国看赛博朋克

    人工智能行业如何使用for循环语句进行循环

    : 支持range()函数生成数字序列 可结合else语句使用 Java中的for循环: 传统结构:for(初始化; 条件; 增量) 增强for循环:for(类型 变量 : 集合) 主要用于数组和集合
    的头像 发表于 09-10 12:55 733次阅读

    工业数据连接器的稳定重要性你不会不知道

    我曾参与一家汽车零部件工厂的智能化改造项目,本以为升级设备就能大幅提升生产效率,却因一时疏忽选用了稳定性欠佳的工业数据连接器。试运行期间,生产线频繁出现数据传输中断,导致机械臂动作错乱,生产出大量残次品,直接经济损失高达数十万元。这次教训让我深刻明白,在工业领域,数据连接器的稳定容不得半点马虎。 工业数据连接器,作为工业设备间数据交互的核心枢纽,其稳定性决定着整个工业生产系统能否正常运转。不同于普通消
    的头像 发表于 07-03 16:32 695次阅读

    基础篇3:掌握Python中的条件语句与循环

    不同的条件执行不同的代码块。Python中的条件语句主要使用if、elif(else if的缩写)和else关键字。 if语句 最简单的条件语句
    发表于 07-03 16:13

    编译错误: error: unrecognizable insn,不知道原因,请教!

    用start_gui.exe生成的代码,再用SEGGER Embedded打开,编译有错,不知道是什么原因,请教各位大佬?
    发表于 06-23 14:45