写给所有程序员_if...else简化研究

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yu_duan_hun/article/details/78247632

编程过程中,发现一些if…else写的很乱,需要整理,以下代码中A表示逻辑表达式1,B表示逻辑表达式2。一般情况下不会用A和B,但此处似乎用A和B更清晰,所以用A,B。

简单的与

int num = 0;
if(A){
    if(B){
        num  = 5;
    }
}

可转换为:

int num = 0;
if(A && B){
    num  = 5;
}

简单的或

int num = 0;
if(A){
   num  = 5;
}else if(B){
   num  = 5;
}

可转换为:

int num = 5;
if(A || B){
    num = 5;
}

复杂变式:A和!A&&B设置相同

int num = 0;
if(A){
    num = 5;
}else{
    if(B){
        num = 5;
    }
}

合成步骤1:

int num = 0;
if(A){
    num = 5;
}else if(B){
    num = 5;
}

结果:

int num = 0;
if(A || B){
    num = 5;
}

解析:
A||B含义:A成立时截断,不会判断B,A不成立时,判断B
验算表:
结果比对

复杂变式:A&&B和!A设置相同

int num = 0;
if(A){
    if(B){
            num = 5;
    }
}else{
        num = 5;
}

合成步骤1:

int num = 0;
if(!A){
    num = 5;
}else{
    if(B){
        num = 5;
    }       
}

根据复杂变式:A和!A&&B设置相同带入上一个例子,可得:

if(!A||B){

}

不过这几种写法也不绝对要这样变,如果改变后的含义不容易理解,上面那个,我宁可这样写:
int b = 0;
if(A && B){
b = 5;
}else if(!A){
b = 5;
}

复杂变式:与非和非或(数学逻辑)

int b = 0;
if(!(A&&B)){
    b = 5;
}
int b = 0;
if(!A || !B){
    b = 5;
}

复杂变式:或非和非与(数学逻辑)

int b = 0;
if(!(A||B)){
    b = 5;
}
int b = 0;
if(!A && !B){
    b = 5;
}

这种修改,是以含义完整性为前提的,否则以后再去检查,看不懂就悲催了,呵呵。尤其是后面两种,因为基于数学逻辑,虽然逻辑没错,但可能一下变得很难理解,这样的话就没有必要修改。

我很讨厌多重嵌套,看起来很糟糕,于是强迫自己计算下,新的逻辑方式可以让代码变得更整洁。通过计算发现了这些规律,特此记录。

附:
(1)

if(A){
    if(B){
    }else{
    }
}

(2)

if(A && B){

}else if(A && !B){

}

就性能而言,(1)的性能优于(2)因为(2)的A逻辑和B逻辑都判断了两次,而(1)个字只判断了一次。此时需要做权衡,可以使用拆分到函数的方式降层(看起来)来保证性能;如果A和B的逻辑判断不复杂,可忽略性能问题。
(3)拆分到函数:

if(A){
    checkB();
}
private void checkB(){
    if(B){
    }else{
    }
}
阅读更多
换一批

没有更多推荐了,返回首页