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