📌

【Ruby】メソッドの可視性

2022/06/19に公開

Rubyではそれぞれのメソッドに呼び出し制限を設定することができ、以下の種類があります。

public

どのインスタンスからでも実行できる。制限なし。
(デフォルトではpublic)

class Baz
  def public_method1
    p "パブリックメソッド"
  end
end

Baz.new.public_method1

# 出力結果
=> "パブリックメソッド"

protected

自分自身、またはサブクラスのインスタンスから実行できる
クラスの外からは呼び出せない。同じインスタンス内で呼び出せる。

class Foo
  def public_method1
    protected_method
  end

  protected
  def protected_method
    p "プロテクトメソッド"
  end
end

class Foo1 < Foo
end

Foo.new.public_method1
# 出力結果
=> "プロテクトメソッド"

Foo1.new.public_method1 #サブクラスからの呼び出せる
# 出力結果
=> "プロテクトメソッド"

f = Foo.new
f.protected_method
# 出力結果
=> # エラー。レシーバ付きでクラスの外からは呼べない。

private

クラスの外からは呼び出せない。同じインスタンス内でのみ、関数形式で呼び出せる。
レシーバを付けた呼び出しはできない

class Bar
  def public_method1
    private_method
  end

  def public_method2
    self.private_method #レシーバを指定の実行不可
  end

  private
  def private_method
    p "プライベートメソッド"
  end
end

Bar.new.public_method1
# 出力結果
=> "プライベートメソッド"

Bar.new.public_method2
# 出力結果
=> # エラー。レシーバを指定の実行不可

Discussion