條件式常現於兩情境:兩分支皆屬正常行為、和一分支正常,另為異常。 在一正常一異常的情況,就可以用防衛敘句(提早 return),顯出異常情況非此函式的邏輯核心。

Replace Nested Conditional with Guard Clauses

flowchart TB
    subgraph nested ["❌ 巢狀條件"]
        direction TB
        N1{條件 A?} -->|是| N2{條件 B?}
        N2 -->|是| N3{條件 C?}
        N3 -->|是| NR[核心邏輯]
        N1 -->|否| NE1[處理 A]
        N2 -->|否| NE2[處理 B]
        N3 -->|否| NE3[處理 C]
    end

    subgraph guard ["✅ Guard Clauses"]
        direction TB
        G1{條件 A?} -->|否| GR1[return 處理 A]
        G1 -->|是| G2{條件 B?}
        G2 -->|否| GR2[return 處理 B]
        G2 -->|是| G3{條件 C?}
        G3 -->|否| GR3[return 處理 C]
        G3 -->|是| GR[核心邏輯]
    end
# Before
def calculate_pay(employee):
    if employee.is_retired:
        if employee.age > 65:
            return 0
        else:
            return employee.pension
    else:
        if employee.is_on_leave:
            return 0
        else:
            return employee.salary

# After
def calculate_pay(employee):
    if employee.is_retired:
        if employee.age > 65:
            return 0
        return employee.pension

    if employee.is_on_leave:
        return 0

    return employee.salary