外部から呼ばれる必要がない関数は公開しない

Contents

Do not expose a function externally unless it truly needs to be called from outside. A public function must represent an external interface. (外部から呼ばれる必要がない限り、関数を外部に公開しない。公開関数は外部インターフェースを表現する必要がある)

解説

関数の可視性を必要最小限に抑えることは、カプセル化の原則に基づく重要な設計です。不必要に公開された関数は、意図しない外部からの呼び出しを許し、内部実装の変更を困難にします。公開関数は契約として機能するため、変更時には後方互換性を考慮する必要があります。内部実装の詳細は非公開にすることで、リファクタリングの自由度が高まります。

具体例

// 悪い例
type UserService struct {
    db Database
}

// 内部処理なのに公開されている
func (s *UserService) ValidateUserInput(name string) bool {
    return len(name) > 0
}

func (s *UserService) CreateUser(name string) error {
    if s.ValidateUserInput(name) {
        return s.db.Insert(name)
    }
    return errors.New("invalid input")
}

// 良い例
type UserService struct {
    db Database
}

// 内部処理は非公開
func (s *UserService) validateUserInput(name string) bool {
    return len(name) > 0
}

// 外部インターフェースのみ公開
func (s *UserService) CreateUser(name string) error {
    if s.validateUserInput(name) {
        return s.db.Insert(name)
    }
    return errors.New("invalid input")
}

参考リンク

Show Text to Share
外部から呼ばれる必要がない関数は公開しない
https://www.tricrow.com/core/coding-standard/no-expose-unnecessarily.html
この記事を書いた人
T.Nakamura
T.Nakamura
AIが大好きなクラウドエンジニア。IT業界歴10年以上。標準化と効率化を追求している。技術ネタを発信中。フォローお気軽にどうぞ!フォローはこちら

カテゴリ

タグ