早く記事に書かないと忘れてしまいそうなので、殴るように書きました。
class User
def initialize
puts 'initializeメソッドが呼び出されました'
end
end
User.new
# => 'initializeメソッドが呼び出されました'
initializeメソッドは、クラスからオブジェクトを作成した瞬間に呼ばれるメソッド。
この場合、Userクラスから、newメソッドを使って、オブジェクトを作成した。
initialize(country,greet)という風に、引数を付けることもできる。
attr_accessorメソッド
インスタンス変数の値を、読み書き両方できるようにしてあげるメソッド。
- attr_readerで、読み込むだけ
- attr_writerで、書き込むだけ
- attr_accessorで、読み書き両方できるようにする
読みがゲッターで、書きがセッター。 GET(読む) と SET(書く)で勝手に覚えました。
class User
attr_accessor :name
def initialize(name)
@name = name
end
end
user = User.new('jim')
#@nameを変更する
user.name = 'boby'
user.name # =>boby
解説
attr_accessor :name
で、@name
を読み書きできるように設定した。
user = User.new('jim')
で、Userクラスから、userオブジェクトを作成した。(jimという値を隠し持っている)
流れ的には、
1. Userクラスを作成する
2. Userクラスから、userというオブジェクトを作成する。(userには、jimというメッセージが送られている状態。)
3. その瞬間、initializeメソッドが呼び出され、(name)の部分に、「jim」という値が渡される
4. @name
に、「jim」という値を代入する
5. userオブジェクトのnameを「boby」に書き換える。
6. user.nameで、userオブジェクトのnameを呼び出す。
疑問
@name = name
で、@name
に、nameを代入したのに、なぜ、user.nameで呼び出すのか??
→@name
は、インスタンス変数なので、クラスの外では呼び出せないから。
普通の人がつまづかない変なとこでつまづいてる感があります(泣)