0
1

More than 1 year has passed since last update.

【Ruby】private、protectedの使い分け

Last updated at Posted at 2023-01-04

praivate

class内でprivateメソッドを定義されたメソッドはレシーバを指定して呼び出すことができなくなります。

class Fooz
  
  private
  
  def say
    p "Hello"
  end
end

foo = Foo.new
foo.say

この場合はエラーが発生します。

次の場合はエラーが発生せずに実行が可能です。

class Foo
  
  def greeting
    say
  end
  
  private
  
  def say
    p "Hello"
  end
end

foo = Foo.new
foo.greeting

privateメソッド内で定義されたsayメソッドは、クラス内で呼び出すことで、インスタンスで使用することが可能となります。

protectedメソッド

privateメソッドと同じようにクラスの外から直接メソッドを呼び出すことができなくなります。
同じインスタンス内で呼び出すことができます。
ここまではprivateメソッドと同じですが、この機能に加えて他のインスタンスでも同じクラスやサブクラスのメソッドであれば呼び出すことが可能となります。

同じクラスのオブジェクト同士ではprotectedメソッドで定義されたオブジェクトを共有できることができるので、情報のやり取りが円滑にできることがあります。

ただし、protectedメソッドは特殊なメソッドであることも覚えておきましょう。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1