【Rails】なぜ"private" "protected" "public"に分けるのか
概要
あるメソッドを実装するときに「アクセス権をどうするか?」という問題に必ず直面すると思います。
それぞれの特徴を知っておくことで、効率良く設計・開発が可能です。
ちなみにこれはカプセル化
と言い、、オブジェクト同士の紐付き(関係性)を薄くし独立性を高め、再利用や交換といった保守性を高める効率の考え方です。
特徴
publicメソッド
- クラスの主な責任や目的を明らかにする
- 外部から実行されることが想定される
- 思いつくままに変更されたりはしない
- 他者が依存したとしても安全
- テストで完全に文書化されている
privateメソッド
- 実装の詳細に関わる部分
- 外部から実行されることは想定されていない
- 変更されやすい
- 他者が依存するのは危険
- 基本的にはテストはしない(個人的な意見です。諸説あり。)
protectedメソッド
- 外部からは隠蔽されている
- 仲間(自クラスかサブクラスのレシーバー、親子関係にあるクラスのみ)からは実行可能
判断のポイント
- なるべく狭い範囲で設定するようにする。
- 余計なアクセス権は想定外の場所の不具合を生む原因にもなりかねないため。
- privateメソッドを多用しないようにする。
- 本来そのクラスの責務でないものを抱えてしまうことが可能性があるため。
- 「別のクラスのpublicメソッドにする」可能性を視野に入れる。
- 最も範囲が狭い
private
をベースとして設計する。 - 継承先、あるいは継承元で呼び出したり上書きしたい場合は
protected
にする。 - 外部からのアクセスを可能にしたい場合は
public
にする。
Author And Source
この問題について(【Rails】なぜ"private" "protected" "public"に分けるのか), 我々は、より多くの情報をここで見つけました https://qiita.com/ren0826jam/items/abdb8c12575edbf1e4c3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .