Contents
Prefer block statements over deep nesting where possible. (可能な限り、深いネストよりもブロック文を優先する)
解説
深いネストは、コードの可読性を著しく低下させ、ロジックの理解を困難にします。早期リターン(ガード節)を使用することで、ネストを浅く保ち、正常系のフローを明確にできます。ネストが深くなるほど、エラー処理や条件分岐が複雑になり、バグの混入リスクが高まります。フラットなコード構造は、コードレビューやデバッグを容易にします。
具体例
// 悪い例(深いネスト)
func ProcessOrder(order Order) error {
if order.ID != "" {
if order.Amount > 0 {
if order.Status == "pending" {
if err := validateOrder(order); err == nil {
if err := saveOrder(order); err == nil {
if err := sendConfirmation(order); err == nil {
return nil
} else {
return err
}
} else {
return err
}
} else {
return err
}
} else {
return errors.New("invalid status")
}
} else {
return errors.New("invalid amount")
}
} else {
return errors.New("invalid ID")
}
}
// 良い例(早期リターンでフラット化)
func ProcessOrder(order Order) error {
if order.ID == "" {
return errors.New("invalid ID")
}
if order.Amount <= 0 {
return errors.New("invalid amount")
}
if order.Status != "pending" {
return errors.New("invalid status")
}
if err := validateOrder(order); err != nil {
return err
}
if err := saveOrder(order); err != nil {
return err
}
if err := sendConfirmation(order); err != nil {
return err
}
return nil
}
