DesignAssembler

備忘録に近い

Rubyのクラスとモジュールについて

Rubyのクラスとモジュールについて、参考リンクを載せながら説明します。

どんな時にモジュールが使われるか

インスタンス化せずにメソッドを格納したいときや、関連するクラスをまとめたいとき、つまり名前空間として使いたいときモジュールを使います。例えば以下のような感じです

module M1
  class C1
  end
  class C2
  end
end

M1::C1.new

クラス/メソッドの定義 (Ruby 2.3.0)

qiita.com

ドット記法と二重コロン記法

まず、前提として「クラス名とモジュール名は定数として定義される」事を頭に入れてください。

よって、モジュール内部のクラスを指定するときやクラスメソッドを指定するときは二重コロン記法で書くことが出来ます。※

一方、ドット記法はメソッド呼び出しのときにのみ使用可能です。

ちなみに、「::」はスコープ演算子というものです。

ruby style guidには「メソッド呼び出しでは::の使用は避けましょう」と書いてあるのでメソッド呼び出しにはドット記法を使いましょう。

#モジュールMAのスコープ内にあるCAクラスのmethod1メソッドを呼び出しています。
MA::CA.method1

github.com

qiita.com

クラスメソッドインスタンスメソッド

クラスに対して処理をするメソッドをクラスメソッドインスタンスに対して処理をするメソッドインスタンスメソッドといいます。(そのまんま)

例えば、クラスからインスタンスを作成するメソッドはクラスメソッドで、インスタンスの値を変更するメソッドインスタンスメソッドになります。具体的には以下のコードのような感じになります。

#Userモデルがあるとします
class User < ActiveRecord::Base
  def name(user)
    puts user.name
  end
end

#コンソールに移動
#new()はクラスメソッド
user = User.new(name: ”abc”)

#nameはインスタンスメソッド
user.name
#=>”abc"

qiita.com

nigohiroki.hatenablog.com

ruby.swift-studying.com

selfについて

self付けるとクラスメソッド、self付けないとインスタンスメソッドになります。

Railsにおけるモジュールの取り扱い

www.slideshare.net

qiita.com

Effective Ruby

Effective Ruby