LoginSignup
33
18

More than 5 years have passed since last update.

include、extend、ActiveSupport::Concernざっくりまとめ

Last updated at Posted at 2015-10-21

これはなに?

最近はお遊びコードじゃなくて、ちゃんとしたコードを読んで勉強しています。ももぞのです。

コードリーディングをしていて、ふとなんじゃこりゃと思ったコードのまとめです。

ただのメモ書きなので、めっちゃざっくりです。

class << self

特異クラス方式のクラスメソッド定義で使う。
一気に何個でもクラスメソッドが定義できる。

class User
  class << self
    def class_method1
    end
    def class_method2
    end
  end
end

self.method

1つだけクラスメソッドを定義するときに使う。

class User
  def self.method
  end
end

def hoge.method_name; end

特異メソッド。
hogeオブジェクトに対してのみ特定のメソッドを持たせるときに使う。

include

ざっくり表現:インスタンスメソッド読み込み

ClassにModuleを読み込み。いわゆるMix-in。
モジュールにモジュールをincludeすることもできる。
includedメソッドが中で呼ばれるらしい。

ちなみにこれだけだとクラスメソッドは別途指定しないと読み込めない。

extend

ざっくり表現:クラスメソッド読み込み

extendメソッドは、オブジェクトの特異クラスにモジュールを取り込み、モジュールのメソッドを特異メソッドとして使えるようにします。

クラスメソッドを定義するのと同じことか。

extend ActiveSupport::Concern

ナウいサービスでよく見るやつ。(いうてそんなに最近でもないか...
モジュールを読み込んだときにインスタンスメソッドもクラスメソッドも両方読み込める。

included do~end

extend ActiveSupport::Concernとセットで使われることが多い。
このブロック内にメソッドを定義しておくと、モジュールがincludeされたあとににそのメソッドが動作する。

module UserDelegatable 
  extend ActiveSupport::Concern
  included do
    def notificate
      p "includeされました"
    end
  end
end

参考

特異クラス・特異メソッド・メソッドの種類 Ruby - Qiita

Rubyのincludeとextendについて - QA@IT

ClassMethodsについて - CubicLouve

» Rails: includeされた時にクラスメソッドとインスタンスメソッドを同時に追加する頻出パターン TECHSCORE BLOG

33
18
1

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
33
18