目次
- class文
- initializeメソッド
- 組み込みクラスの継承の関係
- アクセスメソッド
- 特別な変数self
クラス文
class クラス名 クラスの定義 End
注意 クラス名は必ず大文字で始めないとあかん
initializeメソッド
Class文の中で定義されたメソッドをそのクラスのインスタンスメソッドという。initializeメソッドは特殊でnewメソッドが使われるとかならずinitializeメソッドが呼ばれる。イメージとしてnewがinitializeに置き換わるイメージ。
例
def initialize(name) ⇦イニシャライズメソッド @name = name end def naruto ⇦インスタンスメソッド put ”私の名前は#{name}です” end def sasuke ←インスタンスメソッド put ”私の名前は#{name}です” end anime= Anime.new(“ナルト”) anime.naruto //私の名前はナルトです anime= Anime.new(“サスケ”) anime.naruto //私の名前はサスケです
アクセスメソッド
⇨インスタンス変数をオブジェクト外部から参照したりインスタンス変数を変更したりするためのメソッド インスタンス変数=initializeメソッドで出てきた@nameのことをインスタンス変数という。 インスタンス変数はオブジェクト外部から参照できない、変更できないとは?
class Anime def initialize(name) ⇦イニシャライズメソッド @name = name end anime= Anime.new(“サスケ”) anime.@name // NG 参照できない anime.@name = “サクラ” // NG @nameの中身を変更できない
そこでアクセスメソッドを使う ⇨ attr_reader :変数名 参照が可能(別名ゲッター) attr_writer :変数名 更新が可能(別名セッター) attr_accessor :変数名 参照と更新が可能(アクセサ) どこに記載する? ⇨クラス名の下
class Anime attr_reader :name def initialize(name) ⇦イニシャライズメソッド @name = name end anime= Anime.new(“サスケ”) anime.name // OK 参照できる サスケ
特別な変数self
self=オブジェクト self=そのメソッドを受け取っているレシーバーをさす sayhiの中でselfを使うとsayhiメソッドからメッセージが送られているレシーバー(tom)をさす
class User attr_accessor :name def initialize(name) @name = name end def sayHi puts "hi! i am #{@name}" puts "hi! i am #{self.name}" puts "hi! i am #{name}" end end tom = User.new("tom") tom.sayHi ⇦このレシーバー(tom)selfは指している