アルフォート生活🍫💴

3年後の自分のために、知識をアルフォートの箱に詰めていきます💴

【Ruby】クラスの基礎

ゲッターとセッター

[attr_accessor]を使用しないと、インスタンス精製後に外部アクセスが行えない?

 

[@type]などのようにフィールド変数を定義すれば 、[attr_accessor]を使用しないくてもよいが、[self.type]の様な記述をしたい場合は[attr_accessor]の指定が必須

参照

▽【Ruby】 attr_accessorメソッド初心者入門書~使い方と必要な理由を理解しよう
https://pikawaka.com/ruby/attr_accessor

 

selfと@の違い

self.nameとした場合、attr_accessorで作成されたメソッドを呼び出す

@nameとした場合は、attr_accessorが裏で保管しているインスタンス変数を読みに行く

 

attr_accessorの場合はどちらも同じだが、アクセサがなくインスタンス変数しかない場合、@nameでのアクセスしかできない。

RailsActiveRecordでは、@nameのような変数に格納しているわけではないので、nameというメソッド形式のアクセスが必要となる

 

@ を使う場合、attr_accessor の記述は書かなくても正常に動作する

 

# オブジェクトのメソッド(処理)
def attack(character_name)
puts "#{self.name}が~#{@power}ダメージを与えた!""
end

[self.name]を[@name]に変更すると出力されなくなる
[@power]は問題なく出力される

 

参照

▽【Rails】selfと@の使い分けはどうすればいいでしょうか?
https://teratail.com/questions/202474

 

静的メソッド定義

1つの場合はself.start

def self.start
  /* 処理 */
end

 

複数の場合はself.start

class << self
  def funcA()
    /* 処理 */
  end
  def funcB()
    /* 処理 */
  end
end