原文
if語句的缺點:出現if語句的**會越改越糟,變得越來越難維護。
1.函式引數中有bool變數
實際上是將兩個不同的功能繫結到了乙個函式中,解決方法是用兩個函式代替乙個函式。
1)
void foo(int arg0, bool flag)
else
}2)void foo(int arg0)
void goo(int arg0)
2.swicth case語句
增加新的型別就要增加乙個case,可以用多型來實現。
1)
#include enum type
;struct animal
;void yell(struct animal *a)
}int main()
; dog.yell(&dog);
struct animal cat = ;
cat.yell(&cat);
}
2)
#include struct animal
;struct cat
;void catyell(struct animal *a)
struct dog
;void dogyell(struct animal *a)
int main()
; dog.a.yell = dogyell;
struct cat cat = ;
cat.a.yell = catyell;
struct animal *pa = null;
pa = (struct animal *)&dog;
pa->yell(pa);
pa = (struct animal *)&cat;
pa->yell(pa);
}
3)
#include #include #define offsetof(class, member) ((size_t)&(((class *)0)->member))
#define containerof(ptr, class, member) \
()struct animal
;struct cat
;void catyell(struct animal *a)
struct dog
;void dogyell(struct animal *a)
int main()
; dog.speed = 100;
dog.a.yell = dogyell;
struct cat cat = ;
strncpy(cat.color, "red", sizeof(cat.color));
cat.a.yell = catyell;
struct animal *pa[2];
pa[0] = &dog.a;
pa[1] = &cat.a;
int i = 0;
for(i = 0; i < 2; i++)
}
3.if語句樹
使用邏輯表示式代替
1)
if(a)}2)
if(a && b)
條件語句中減少用else
條件語句是程式中的極其核心的部分。在處理一些複雜的條件語句的時候,可能會套用多層的if,在程式中也可能會用到else。但是如果你用了2層if 3層if,或者更多的時候,則不要用else,因為這樣會讓本來簡單的程式的原理,變得十分複雜。乙個月之後再來讀這段程式,自己都會讀不懂。以php以例,如果遇到這...
用State模式減少if elseif語句
注重這種模式的理解!我們在寫程式的過程中會遇到很多的邏輯判斷,一般都是用if else if.else if swith case等來做判斷,然後根據結果做一下分支處理,這樣寫雖然方便,但會增加以後的維護難度,假如有上百個if else if判斷,估計後期維護的人看到 頭都大了。像這種情況可以用st...
程式中減少使用 if 語句的策略
if語句會觸發以下問題 if 條件1 處理語句1 elseif 條件2 處理語句2 else 處理語句31 if 語句的 易越改越混亂。處理語句 越來越多,耦合越來越複雜,就會很難讀。進一步巢狀 if 語句與本地 return 的濫用情況也很常見,很難搞懂業務邏輯是選擇了哪種路徑。2 if 語句缺失...