0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Rails] privateとprotectedの違い

Posted at

はじめに

railsアプリを作成する中で、priateprotectedの違いが分からなかったため調べてみました。
とても噛み砕いた内容になるかと思いますので、ご了承ください。

privateとprotected

共通点

クラス外からは呼び出す事ができない。

class Food
  private
    def breakfast
      p "パン"
    end

  protected
    def lunch
      p "パスタ"
    end
end

food = Food.new
food.breakfast
#  >> エラー
food.lunch
# >> エラー

同じクラスのインスタンスの中であれば呼び出せる。

class Food

  def morning
    breakfast
  end
 
  def noon
    lunch
  end

  private
    def breakfast
      p "パン"
    end

  protected
    def lunch
      p "パスタ"
    end
end

food = Food.new
food.morning
# >> "パン”
food.noon
# >> "パスタ"

protected

protectは上記に加え、生成した別のインスタンスが同じクラスを持っていたら呼び出す事ができます。

class Food

  def set_like_food(food)
    @food = food
  end

  def my_like_food(food2)
    p "私の好きな食べ物は、#{get_like_food}と、#{food2.get_like_food}です。"
  end

  private
    def get_like_food
      @food 
    end
end

food1 = Food.new
food1.set_like_food("パン")

food2 = Food.new
food2.set_like_food("パスタ")

food1.my_like_food(food2)

def my_like_food(food)#{get_like_food}では呼び出し元の値である「"パン"」が入っており、上記で説明した、クラス内の他のインスタンスから呼び出せています。

しかし#{food2.get_like_food}の「food2」は、呼び出し元の「food1」とは異なるインスタンスです。
つまり、food1のメソッドをfood2が#{food2.get_like_food}のように使用しようとしています。

その場合、get_like_foodメソッドがprivateメソッドだと呼び出せません。
逆にprotectedだと呼び出せます。

終わりに

自分で見返した時理解できるように、自分なりに噛み砕いて記述したため分かりずらい部分やずれた理解をしている部分があるかもしれません。
その際はコメントで教えてえただけると嬉しいです!

参考サイト

【Ruby入門】private と protected の使い方まとめ【メソッドのアクセス制御】

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?