ゲッター
あるクラスのインスタンスのインスタンス変数の値を返すだけのメソッドのことです。これを定義することで、インスタンスから自身の持つインスタンス変数の値を取得することができます。
【例】MovieクラスとTicketクラスがあるとします。
class Movie
def initialize(title, fee, start_date, end_date)
〜省略〜
end
def title #ここから
return @title
end
def fee
return @fee
end #ここまでがゲッターの定義です
end
class Ticket
def initialize(movie)
@title = movie.title #movieクラスのインスタンス.titleで参照できます
@fee = movie.fee #movieクラスのインスタンス.feeで参照できます
end
end
インスタンスは自身のインスタンス変数titleやインスタンス変数feeの値を返します。つまり、movieクラスのインスタンス.titleなどとすることで、それぞれの値を取り出せるようになったのです。
require
あるファイルから他のファイルの記述内容を参照するためのメソッドです。
例えばhoge.rbとfuga.rbいうファイルがあった時、fuga.rbにrequire "./hoge"と書くことでfuga.rbにhoge.rbの記述が書かれていることにしてくれます。
なぜまとめて書かないかというと、クラスの中身が大きくなってきた時に不便で、細かく分けると管理しやすいからです。
【例】
require './movie'
require './ticket'
Dateクラス
【例】
require './movie'
require './ticket'
〜省略〜
oceans_eleven = Movie.new(
"Ocean's Eleven",
1800,
Date.new(2020, 4, 4),
Date.new(2020, 6, 4)
)
Date.new()は日付を表現するためのクラスです。Dateクラスを使って日付を扱えば、うるう年など日付関連の計算が楽になります。Dateクラスを利用するには明示的にrequireを使って読み込む必要があります。
Dateクラスのインスタンスには、第一引数から順に年、月、日の順で数字で値を渡します。
Rubyの公式ドキュメント
セッター
インスタンス変数の値を更新するためのインスタンスメソッドです。
【例】セッターを使用せずに値を更新する場合
def initialize
@movies = []
end
@movies = 更新したい値
【例】セッターを使用し値を更新する場合
def initialize
@movies = []
end
def movies = (movies) #セッターを定義してます
@movies = movies
end
yyy.moveis = [A,B,C]
「=が一つの代入式」に見えるのは、メソッド名に=が含まれていたからです。Rubyはメソッド名であっても半角スペースを無視するため、このようなことができます。
self
例えば映画の選択肢が出て、どれかを選択できる状態にできるとします(今回は1つしか設定していませんが、)。メッセージを出すためにputsメソッドを、ユーザーが選択肢を選べるようにgetsメソッドを使います。
puts "どの映画を見ますか?"
i = 0
self.movies.each do |movie|
puts "#{i} #{movie.title}: #{movie.fee}円"
i += 1
end
gets
インスタンスメソッドの中でselfと書くと、そのインスタンスメソッドを使っているインスタンス自身を参照できます。
つまり、self.moviesの返り値は今回の場合xxx.rbにある[oceans_eleven]となります。その後、eachメソッドで一つ一つのmovieが参照され、それぞれのタイトルと金額が並んで表示される形になります。
class Yyy
def initialize
@movies = []
end
def movies
@movies
end
def movies=(movies)
@movies = movies
end
def display_menu
puts "どの映画を見ますか?"
i = 0
self.movies.each do |movie|
puts "#{i} #{movie.title}: #{movie.fee}円"
i += 1
end
gets
end
end
attr_accessor
ゲッター、セッターを簡単に定義できるメソッドです。
【例】
class Dog
attr_accessor :name, :type, :age
end
以下の定義と同様の意味合いです。
【例】
class Dog
def name
@name
end
def name=(name)
@name = name
end
def type
@type
end
def type=(type)
@type = type
end
def age
@age
end
def age=(age)
@age = age
end
end