はじめに
今回がQiita初投稿です。
Rubyの勉強を始めて1ヶ月弱ですが、以前学習していたPHPとの仕様の違いに驚かされることが多いです。。その中でも今回はアクセス修飾子について備忘録も兼ねて記事に残そうと思います。
PHPのアクセス修飾子
- public: どこからでもアクセス可能
- private: 同一のクラス内からのみアクセス可能(サブクラスからはアクセス不可)
- protected: 同一のクラスやサブクラス内からアクセス可能
Rubyのアクセス修飾子
- public: どこからでもアクセス可能
- private: 同一のクラスやサブクラスのインスタンスメソッド内からアクセス可能
- protected: 同一のクラスやサブクラスのインスタンスメソッド内からレシーバ付きでアクセス可能
違いや注意点
まずRubyの場合、privateとprotectedの違いが分かりにくかったです。
privateはレシーバにselfしか設定できないのに対し、protectedは同じクラスをもとに作られたインスタンスであれば別のインスタンスでもアクセスできるという事でしょうか。
それと同時にRubyのprivateメソッドはオーバーライド可能で、サブクラス側でアクセス修飾子の変更が可能であることは注意が必要ですね。
PHPと比較した場合、Rubyのprivateはサブクラスからもアクセス可能なので柔軟な継承が可能になりそうですが、制限を厳しくして厳密なカプセル化を実現するという意味ではPHPのprivateの方が安心な気もします。
あとがき
アクセス修飾子以外にもRuby特有の仕様が随所にあるので、少しずつ慣れていきたいと思います。
まだ理解が曖昧な部分も多いので、もし違う箇所等がありましたらぜひご教授いただきたく存じます。