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

    文章

    343

    浏览量

    40604

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

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

收藏 人收藏

    评论

    相关推荐

    使用Keil编译的时候else里的语句没有编译是怎么回事?

    最近遇到了一个编译问题,我在stm32f4xx_it.c文件中的CAN2_RX0_IRQHandler函数里编写了一个if——else if ——else语句,但调试的时候发现elseif
    发表于 03-11 06:42

    7种MOSFET栅极电路的常见作用,不看不知道

    7种MOSFET栅极电路的常见作用,不看不知道
    的头像 发表于 12-15 09:46 382次阅读
    7种MOSFET栅极电路的常见作用,不看<b class='flag-5'>不知道</b>!

    揭秘pcb是什么物质:你不知道的“化学战士”

    揭秘pcb是什么物质:你不知道的“化学战士”
    的头像 发表于 12-14 10:27 393次阅读

    Verilog代码:if-else和case的电路结构和区别

    每个if-else就是一个2选1mux器。当信号有明显优先级时,首先要考虑if-else,但是if嵌套过多也会导致速度变慢;if语句结构较慢,但占用面积小。 嵌套的if语句如果使
    的头像 发表于 11-29 15:10 719次阅读

    不知道的FPC,它的发展史竟然是这样的!

    不知道的FPC,它的发展史竟然是这样的!
    的头像 发表于 11-15 10:48 446次阅读

    如何通过策略模式简化if-else

    相信大家日常开发中会经常写各种分支判断语句,比如 if-else ,当分支较多时,代码看着会比较臃肿,那么如何优化呢? 1、什么是策略模式? Define a family
    的头像 发表于 10-08 16:08 264次阅读
    如何通过策略模式简化<b class='flag-5'>if-else</b>

    keil中if语句必须加上else吗?

    最近调程序发现和C语言有点不同,不知道什么原因。。
    发表于 10-08 06:49

    如何解决冗长的if...else条件判断(上)

    : print ( "不知道是什么" ) # 写很长的一段if语句来判断不同的情况 这段代码的使用场景是满足用户可以完成在不同场景进行对应的操作,对应后端的代码,你肯定能想到最简单的实现方式就是上面的if ... else
    的头像 发表于 09-12 17:03 401次阅读

    Python条件和条件语句

    if语句 对于if语句,若条件判定为真,那么后面的语句块就会被执行。若条件判定为假,语句块就会被跳过,不会执行。 1 #if
    的头像 发表于 09-12 16:45 354次阅读

    C语言中if语句if-else语句和switch语句详解

    在C语言中,有三种条件判断结构:if语句if-else语句和switch语句
    发表于 08-18 16:36 1005次阅读
    C语言中if<b class='flag-5'>语句</b>、<b class='flag-5'>if-else</b><b class='flag-5'>语句</b>和switch<b class='flag-5'>语句</b>详解

    【verilog每日一练】if_else语句优先级

    利用if_else语句中多个条件的优先级关系实现:将变量a[5:0]的十进制中的十位对应的数字提取出来,并且将十位对应的数字赋值给变量b[3:0],要求每个if-else语句中每个条件
    发表于 08-10 09:53

    盘点你不知道的电缆套管知识-科兰

    电缆套管又称保护管、导管,是在电气安装中用于保护电线、电缆布线的管道,允许电线、电缆的穿入与更换。电缆套管是电力工程中推广使用的一种新型套管材料。盘点你不知道的电缆套管知识,希望能够得到帮助。 电缆
    的头像 发表于 05-25 10:24 1122次阅读

    rt1176板子,M7和M4可以同时访问flexspi A吗?会不会有数据异常?

    rt1176板子,M7和M4可以同时访问flexspi A吗?会不会有数据异常?如果没有,如何处理数据同步问题
    发表于 05-22 08:49

    TCP和UDP没人不知道吧?

    TCP/IP协议,你一定经常听说吧,其中TCP(Transmission Control Protocol)称为传输控制协议,IP(Internet Protocol)称为因特网互联协议,好吧,这都是什么2B名字,根本不知所云,这个时候,计算机科学对于一个没有经过深入研究的人,毫无用户体验可言。
    的头像 发表于 05-18 17:18 389次阅读

    pikascript移植报错不知道是哪里的问题?

    想在fm33lx基础上应用pikaScript做脚本开发,通过env添加了pikaScript的软件包,工程里也出现了对应的文件,但是在编译的时候提示错误,不知道哪里的问题,请大咖指教。
    发表于 05-05 11:49