深いネストよりもブロック文を優先する

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
}

参考リンク

Show Text to Share
深いネストよりもブロック文を優先する
https://www.tricrow.com/core/coding-standard/prefer-block-statements.html
この記事を書いた人
T.Nakamura
T.Nakamura
AIが大好きなクラウドエンジニア。IT業界歴10年以上。標準化と効率化を追求している。技術ネタを発信中。フォローお気軽にどうぞ!フォローはこちら

カテゴリ

タグ