0
0

public, private, protected

Posted at

それぞれの違い

Public

Publicメソッドは、クラスの外部から自由にアクセス可能です。
これらはクラスのインターフェースを形成し、外部のコードから利用されることを意図しています。
Rubyでは、クラスで定義されたメソッドはデフォルトでpublicです(ただし、initializeメソッドは例外で、常にprivate)。

Private

Privateメソッドは、そのクラスのインスタンスからのみアクセスできます。
これらのメソッドは、外部のクラスやサブクラスからは直接呼び出すことができません。
Privateメソッドは、レシーバを指定せずに呼び出す必要があります。つまり、selfを明示的に使用してはいけません。
これは、クラスの内部実装の詳細を隠蔽し、外部からの不要な干渉を防ぐために使用されます。

Protected

Protectedメソッドは、同じクラスまたはサブクラスのインスタンスからアクセスできます。
これらは、外部のクラスからは直接アクセスできませんが、同じクラスまたはサブクラス内の他のインスタンスからはアクセス可能です。
Protectedメソッドは、特に比較操作など、インスタンス間での情報の共有が必要な場合に役立ちます。

コードによる違い

class MyClass
  # Publicメソッド
  def public_method
    'This is a public method'
  end

  # Privateメソッドを定義
  private
  def private_method
    'This is a private method'
  end

  # Protectedメソッドを定義
  protected
  def protected_method
    'This is a protected method'
  end
end

# クラスのインスタンスを作成
instance = MyClass.new

# Publicメソッドの呼び出し
puts instance.public_method # => "This is a public method"

# Privateメソッドの呼び出しを試みる(エラーが発生するはず)
begin
  puts instance.private_method
rescue => e
  puts e.message # => "private method `private_method' called for #<MyClass:0x0000>"
end

# Protectedメソッドの呼び出しを試みる(エラーが発生するはず)
begin
  puts instance.protected_method
rescue => e
  puts e.message # => "protected method `protected_method' called for #<MyClass:0x0000>"
end
0
0
0

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
0