0
0

More than 3 years have passed since last update.

クラスについて

Last updated at Posted at 2020-01-30

早く記事に書かないと忘れてしまいそうなので、殴るように書きました。


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は、インスタンス変数なので、クラスの外では呼び出せないから。

普通の人がつまづかない変なとこでつまづいてる感があります(泣)

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