webstorm如何去掉代码中的类型_实例演示如何优化代码中深度嵌套的if-else,提升代码质量...

有点啰嗦的前言

有人喜欢if-else,称之为程序结构化的灵魂。确实,就计算机逻辑来讲,if-else最符合计算机非0即1的逻辑。就连在工作时,项目经理在给我们描述业务逻辑时也会来两句if如何,else如何!但是,也有人对代码中出现过深的if-else嵌套感到深恶痛绝。因为不论是在Debug、功能扩展、后期维护还是项目代码开源共享、项目交接等情况下,若是遇到十几层深度成百上千行的if-else嵌套代码,任何人都会头疼不已。

优缺点

说了这么多,总结一下if-else的优缺点:

优点

1、最容易上手;

2、逻辑性强,在实现业务时比较实用;

缺点

1、嵌套过深,测试困难;

2、维护困难,若要修改外层逻辑有可能会影响到深层次的逻辑;

3、功能扩展可能会出现困难,需要找到对应的分支,重新梳理逻辑;

4、代码臃肿,阅读性差;

总之,if-else在程序设计中是不可避免的,作为程序员能做的就是减少嵌套,提升代码的可阅读性和质量。但是,这些都需要一定的经验,对于新手来说实现功能已经就十分困难了,若还需在过程中考虑这些无疑是雪上加霜。所以,小编就个人经验分享一些小技巧,希望能帮助大家提升代码质量。

switch case替代

这个大家都知道,当判断条件是某个变量的值时,可以用switch case来代替代码中的if-else;

int a = b + c ;if(a == 1){/*doing something*/}else if(a == 2){/*doing something*/}//*****else{/*doing something*/}

替代为:

switch (a){case 1 :{/*doing something*/}break ;case 2 :{/*doing something*/}break ;//***default:{/*doing something*/}break;}

案例

针对后文所提及的方法,有一个很经典的演示案例--输入一个年份,判断是否为闰年。其逻辑是:首先需要判断年份是否能被4整除,能被4整除还需要分整百年和非整百年,整百年还必须被400整除才是闰年。用代码实现如下:

326e3443e20bf12286adc1851a30b6b8.png

减少没必要的if-else

有时候if只是拿来判断某些变量是否异常,那么主程序那一块没必要加if-else,只需要在异常处加if判断;

如案例可以用这种方法重构如下:

leap=0;if(year%4==0) { leap=1;if(year%100==0) { if(year%400 !=0) leap=0;} } 

优化完,明显清爽很多。像上述案例只是赋值用这种重复赋值的方式可以避免掉一部分的else出现,但是如果分支是运行不同的函数呢?此时,就需要换一种方式,那就是提前return,例如:

if(condition){      dosomething();  }else{       dootherthing();   }//采用提前return法则,去掉一个elseif(condition){      dosomething();      return ;  } dootherthing();

三目运算符替代

三目运算符可以很好的替代简单的if-else逻辑,还是用案例来演示,用三目运算符重构后:

year%4==0?(year%100 ==0?(year%400==0?1:0):1):0 ;

但是这仅仅只是减少了代码量,在阅读友好性上反而降低了。三目运算符只适合替代简单的if-else;

合并嵌套

通过将判断条件用逻辑运算符&&和||合并,从而减少嵌套。案例代码可以重构为:

leap=0; if(year%4==0 && year%100==0 && year%400==0)leap=1; else if(year%4==0 &&year%100!=0)leap = 1 ;//甚至可以更狠,但是并不建议这么做if(year%4==0 && year%100==0 && year%400==0 || year%4==0 &&year%100!=0)leap=1; 

拆分嵌套

通过梳理if-else的嵌套逻辑,将需要深层嵌套的if-else拆分成多个独立的if-else代码块,或者平衡if-else中嵌套深度。案例代码可以重构为:

leap = 0 ;if(year%100==0){if(year%400 ==0) leap = 1 ;}else{if(year%4 == 0)leap = 1 ;}

封装

如果遇到嵌套实在过深没有办法优化的话,可以将上下层尽量剥离并将部分嵌套封装为函数,以传参的方式将条件变量传递给函数。

//将部分嵌套封装为函数int JudgeLeap(int year){  int leap = 0 ;if(year%100==0) { if(year%400==0) leap=1; else leap=0;} else leap=1;  return leap ;}//主代码即重构为:if(year%4==0) leap = JudgeLeap(year)else leap = 0 ;

总结

上述各方法并不是独立的,在实际使用过程中可以择优选择一种,也可以组合起来使用;另外还可采用设计模式和类的多态来重构,不过小编个人认为(仅代表个人想法),那已经是属于类的设计层面了,这里就不讨论;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值