Java 條件式主要有 if-else 以及 switch 2種,撰寫條件式有一些原則可以參考。
1.通用性原則:
1.條件式的判斷邏輯順序可以依照 “正常流程 or 重要性 > 執行頻率 > 字母或數字順序” 來排列。
e.g. 判斷英文字母或是數字,因為2者都是屬於正常流程,重要性也相同,但英文字母的執行頻率比數字高,
因此應該把英文字母的判斷放在上方。
private void isNumberOrLetter(char source) { if (source == 'a' || source == 'b' || source == 'c' ...) { } else if (source == '1' || source == '2' ...) { } }
2.switch用於簡單的條件判斷,if-else用於複雜的條件判斷。
3.若執行區塊的複雜度高,可以使用 “重構:提取函式” 來提取複雜度高的區塊。
4.if-then-else 最後一個 else 和 switch 的 default 必須注意不包含的條件,可以使用 assert 或 throw new illegalArgumentException 來處理。
5.為了提高可讀性,判斷邏輯的寫法可以依照數軸來寫。e.g.
判斷 i 是否在 min 和 max之間 → min <= i && i <= max
if(0 <= i && i <= 10)
判斷 i是否在 min 和 max 之外 → i < min or i > max
if(i < 0 || i >10)
判斷 i 應該小於或大於某個值 → i < min or i > max 。 ref to: The art of readable code
if(i < 0) if(i > 10)
2. If-else:
1.不要寫空的if,可以反轉if判斷條件並把原本對應else的動作放到if中。e.g.
if(condition){ }else{ //do else action }
改為
if(!condition){ //do else action }
2.判斷條件多且複雜時,可使用 “重構–分解條件式”。e.g.
if(color == green && color == red){ }else if(color == red && color == black){ }else if(color == black && color == green){ }
改為
if(isGreenAndRed(color)){ }else if(isRedAndBlack(color)){ }else if(isBlackAndGreen(color)){ }
3.分解巢狀條件式,可以使用 “重構-以衛述句取代巢狀條件式” 。
3. Switch:
1.不要摻雜多個case,每個case都應該使用break跳出。