简化条件判断式,少写IF/ELSE

过多的if/else代码段可能导致阅读性和维护性下降。文章通过两个示例,展示了如何简化条件判断:使用表驱动法改进计算每月天数的函数,以及利用最值函数优化数字处理函数。建议通过提取函数和避免嵌套条件来改善代码质量,以提高代码的可理解和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人说过:写太多if/else 的代码不是好代码。写了几年的代码,感觉这句话很有道理。如果一段代码有太多的if/else,起码有以下问题。第一阅读性差。可能自己当时看的懂,过了一段时间估计自己也看不懂了,更何况其他程序员来理解这段代码。第二维护性差:写太多的if/else,如果稍有不慎,出错几率很大,特别是当其他程序员来改这段代码,那么可能引起新的bug。第三,可能反映出你面向对象思想不深刻,有些IF/ELSE需要从整体设计上改善

下面看两个例子,希望能给你带来一点启示。看看如何减少下面代码中的if/else?

 

一个计算每月天数的函数:

public int getDaysOfMonth(int month) {

              //一个月的天数

              int days=0;

              if(month==1) {

                     days=31;

              }else if(month==2) {

                     days=28;

              }else if(month==3) {

                     days=31;

              }else if(month==4) {

                     days=30;

              }else if(month==5) {

                     days=31;

              }else if(month==6) {

                     days=30;

                    

                     //下面继续7-12个月的if/else...

                    

              }else  {

                     days=-1;

              }

              return days;

       }

 

第二个函数:

public int getNumber(int number) {

              if(number <=18) {

                     return 18;

              }             

              if(18<number && number<60) {

                     return number;

              }         

              if(number >60) {

                     return 60;

              }

             

              return 0;

       }

第一个求每月天数的代码,我们可以考虑写个长度为12的数组

int[] monthDay=new int[]{31,28,31,30,31,...,31}

这样我们以月为访问索引通过month[index]可以很快拿到每个月的天数。这种方式称作表驱动法。

 

第二个getNumber函数,我们可以考虑使用最值函数,方式如下:

max(min(60,number),18)

 

在重构改善既有代码设计书上提到如何改善复杂的条件表达式:

如果你的if判断很复杂,那么你可以将部分判断抽出一个函数,取一个好的函数名,这样不仅简化了复杂的判断,也让代码更清晰。

如果代码中还存在嵌套循环,你可以把某些判断条件从嵌套中抽出来,在该条件为真时立刻返回结果。

改善代码质量不仅要做好设计,也要在实现细节上做好。如果你用心去改善你的代码,你肯定能写成质量更高的代码!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值