程式設計過程中,發現一些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{
}
}
if(A && B){
}else if(A
if(A){
checkB();
private void checkB(){
if(B){
}else{
}
}