LoginSignup
18
4

More than 1 year has passed since last update.

【初心者向け】moduleの使い分け

Last updated at Posted at 2022-09-13

執筆経緯

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と同じように定数を定義することができます!

終わりに

使い方を紹介する時の例はそれぞれの使い方のみを例として挙げましたが実際はそれぞれの使い方を組み合わせて
使われることもあるので覚えておきましょう!!
初心者が初心者に向けて書いたので間違いなどがあると思いますがその際は優しく教えて頂けると助かります!

18
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
4