LoginSignup
2
0

More than 3 years have passed since last update.

Privateメソッドについて

Posted at

Privateメソッドとは

[プロを目指す人のためのRuby入門] 著:伊藤淳一

「クラスの外からは呼び出せず、クラスの内部でのみ使えるメソッド」だと言えます。

private配下にメソッドを記述すると、そのメソッドはPrivateMethodになり、そのクラス内からしか呼び出すことができなくなります。
つまり、
他クラスから呼び出すことができなくなるので、予期せぬ結果を防ぐことができるというイメージです。

(例)

class Fuga
    def call_private_method
        # privateメソッドはクラス内から呼び出すことができる。
        private_hoge
        # => "呼び出せました!"
        #privateメソッドを呼び出す
        #(private_fugaメソッドは、privateのprivate_hogeメソッドを呼び出す。)
        private_fuga
        # => "呼び出せました!"        
    end
    private
    def private_hoge
      puts("呼び出せました!")
    end
    def private_fuga
      #privateメソッドからprivateメソッドを呼び出すことができます。
      private_hoge
    end
end
fuga = Fuga.new
fuga.call_private_method
# => "呼び出せました!"
# => "呼び出せました!"

#クラス外からprivateメソッドは呼び出せない
#(レシーバをつけて呼び出すことはできない)
fuga.private_fuga
# =>sample.rb:33:in `<main>': private method `private_fuga' called for <Fuga:0x0000000198a318> (NoMethodError)
# =>Did you mean?  private_methods

privateメソッドは継承先から呼び出せる

privateメソッドはクラス外から呼び出せないと述べましたが、継承先のクラス内からは呼び出すことができます。

class FugaBase
  private
  def private_hoge
    puts("呼び出せました!")
  end
end
class Fuga < FugaBase
  def hoge
    private_hoge
  end
end
Fuga.new.hoge
# => "呼び出せました!"

まとめ

private配下にメソッドを記述すると、他クラスから呼び出すことができなくなるので、予期せぬ結果を防ぐことができる

2
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
2
0