sample.rb
require 'date'
class User
attr_accessor :name,:birthday
def initialize(name,birthday)
@name = name
@birthday = birthday
end
def display_birthday
@birthday.strftime("%Y年 %m月 %d日")
end
def inner_call_display_birthday
self.display_birthday
# self は省略可能。オブジェクト化して外部から呼び出した場合、
# この self がオブジェクト自体を指す。
# 下の例でいうと user を指す。
display_birthday
end
def call_private_name
private_name
# インスタンスメソッドからならprivateメソッドを呼び出せる。
# しかし冒頭に self をつけるとエラーになるので注意。selfはオブジェクト自体をさす。
# selfをつけないメソッドの呼び出しを「関数形式」というらしい。
end
private #ここより下に定義されたメソッドは private メソッドになる
def private_name
#クラス外部から直接呼び出すことは不可能
#同じクラスのインスタンスメソッドからなら呼び出して使える。
@name
end
end
birthday = Date.new(2000,1,1)
user = User.new("sato",birthday)
puts user.inner_call_display_birthday #=> 2000年01月01日
#puts user.private_name => private_name は private メソッドなので外部から呼び出し不可
puts user.call_private_name #=> sato
## おまけ
# あまり使うことはないがprotectedメソッドも同じように定義し、protectedメソッドでは self
# をつけても大丈夫