執筆経緯
moduleは色々な使い方ができるのは知っていたのですが具体的にどうやって使えばいいのかを
勉強していて気付いたことを共有したいと思い執筆に至りました。
対象の読者
- ruby初心者の方
- moduleの使い方がわからない方
上記の方たちに向けて記事を書いていこうと思います!
moduleの使い方その1
moduleは色々な使い方がありますがまず紹介するのは名前空間としての使い方です!
class OtukaTakashi
def initialize(from,age)
@from = from
@age = age
end
end
class OtukaTakashi
def initialize(job,talent)
@job = job
@talent = talent
end
end
上記の様に別々に定義されて使い方も異なるclassがあります。
それぞれ違うところで1個のclassのみが使われている内はいいですがある日一緒に使うことになったら
どうやって区別すればいいのか困りますよね?
そんな時にmoduleの出番です!!
module AbeCabinet
#これはAbeCabinetに属するclass
class OtukaTakashi
def initialize(from,age)
@from = from
@age = age
end
end
end
module DiveIntoCode
#これはDiveIntoCodeに属するclass
class OtukaTakashi
def initialize(job,talent)
@job = job
@talent = talent
end
end
end
moduleの下にclassを定義することでmoduleに属するclassという意味になるので名前の衝突は発生しなくなります。
上記のclassを参照する時は
AbeCabinet::OtukaTakashi.new(osaka,58)
DiveIntoCode::OtukaTakashi.new(unemployed,magic)
というようにmodule::classという書き方で参照することができます!!
上記の使い方だけでなくクラスの
グループやカテゴリーを分けるときにも
名前空間としてmoduleが使用されます。
moduleの使い方その2
moduleはincludeやextendすることでインスタンスメソッドやクラスメソッドとして呼び出すことができますが
module単体でメソッドを定義したい、というケースもあると思います。
そんな時は
module Pokemon
def self.name(text)
puts "#{text}"
end
end
上記の様に記述することで
Pokemon.name('pikachu')
として呼び出すことができるようになります。具体的に言うとmodule名.method名という形で記述すると呼び出すことができます!!
module_function :メソッド名とすることでミックスインとしても特異メソッドとしても
使用できるように定義することができます!
またclassと同じように定数を定義することができます!
終わりに
使い方を紹介する時の例はそれぞれの使い方のみを例として挙げましたが実際はそれぞれの使い方を組み合わせて
使われることもあるので覚えておきましょう!!
初心者が初心者に向けて書いたので間違いなどがあると思いますがその際は優しく教えて頂けると助かります!