動的メソッド
前回は
「動的ディスパッチ」をメインに説明しました。
今回は本丸である動的メソッドの説明を行います。
動的メソッド定義
動的メソッドとは動的にclassとモジュールにメソッドを追加出来ます。
使い方は簡単で「define_method メソッド名」を定義してブロックの中身に
処理コードをつければOKです。
class Hello
define_method "hello" do
puts "hello"
end
end
obj = Hello.new
obj.hello # "hello"
上のコード見ても何言ってるのって感じですよね。
define_methodが効力を発揮するのは同じような処理をまとめるのに
適しています。
例として、たいやきの価格を求めるコードを書いてみます。
メソッドでかく
class Taiyaki
def anko_price
puts 120
end
def cheese_price
puts 200
end
def cream_price
puts 220
end
end
Taiyaki.new.anko_price
今回は例として「anko・cheese・cream」の3つの味の価格を求めるコードです。
味が何十種類もあったらメソッドを作るの面倒ですよね。
動的メソッド
class Taiyaki_dynamic
def initialize
hash = {"anko" => 120,"cheese" => 200,"cream" => 220} #①味と価格対応ハッシュ
hash.each do |key,val|
Taiyaki_dyanamic.price(key,val) #②メソッド作成
end
end
def self.price(name,price) #クラス・メソッド
define_method "#{name}_price" do
puts price
end
end
end
Taiyaki_dynamic.new.anko_price #120
Taiyaki_dynamic.new.cheese_price #200
今回はmethod作成を self.priceというクラスメソッドにまとめています。
そして initializeメソッド(②)で、クラスをnewした際各味の価格を呼び出すメソッドを作成します。
たいやきの味が増えた場合はhash(①)を増やすだけで良いのでメソッド追加より見通しがよくなります。