`
aiwori
  • 浏览: 8713 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

人说过:写太多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判断很复杂,那么你可以将部分判断抽出一个函数,取一个好的函数名,这样不仅简化了复杂的判断,也让代码更清晰。

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

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

分享到:
评论

相关推荐

    PHP IF ELSE简化/三元一次式的使用

    有时候我们可能会在PHP内做一些简单的判断..例如 判断是否为空 如果为空白就填入值之类的

    uboott移植实验手册及技术文档

    实验三 移植U-Boot-1.3.1 实验 【实验目的】 了解 U-Boot-1.3.1 的代码结构,掌握其移植方法。...#else #define TACLS 0 #define TWRPH0 4 #define TWRPH1 2 #endif #if defined(CONFIG_S3C2440) ...

    Java EE常用框架.xmind

    编程式:通过写if/else 授权代码块完成 注解式:通过在执行的Java方法上放置相应的注解完成 Spring与Shiro整合 在web.xml配置拦截器 在Shiro配置文件上配置在web.xml对应的bean 配置安全管理器...

    重构36计.docx

    第二计:条件运算符赋值代替if else赋值 3 第三计:节约使用系统资源 3 第四计:为接口引入抽象版本 4 第五计:消灭魔法数 4 第六计:使用断言、异常确保实现的正确性 4 第七计:串联函数调用 5 第八计:临时变量在...

    关于ds18b20程序

    }else { PullDownDQ(); Delayus(12); //86us(60-120) } ReleaseDQ(); Delay2us(); //2us(&gt;1us) } /******************************************************** * 写Byte DS18B20 * ****************************...

    你必须知道的495个C语言问题

    2.12 怎样从/向数据文件读/写结构? 结构填充 2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 2.14 为什么...

    《你必须知道的495个C语言问题》

    2.12 怎样从/向数据文件读/写结构? 27 结构填充 27 2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 27  ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。常见的有Oracle、mssql、mysql等 二、 主流数据库 数据库名 公司 特点 工作环境 mssql 微软 只能能运行在windows平台,...

Global site tag (gtag.js) - Google Analytics