LoginSignup
380
284

More than 3 years have passed since last update.

メソッドとクラスメソッドとインスタンスメソッドが曖昧だった

Last updated at Posted at 2017-09-24

Rubyでプログラムを記述している際に疑問に思うことが多々あります。
今回はメソッド、クラスメソッド、インスタンスメソッドがあいまいになったのでまとめていきます。

メソッド

クラスメソッドにしてもインスタンスメソッドにしても、メソッドという名称がついているのだからどちらもメソッドです。
では、そもそもメソッドとは何なのでしょうか?

一般には、方法、手法といった意味。オブジェクト指向プログラミングにおいて、クラスにはメソッドとフィールドがあり、メソッドには、処理内容を記述する。
引用元:コトバンク

足し算
def addition (a,b,c,d,e)
    puts a + b + c + d + e
end

上のadditionメソッドに5つの数字を与えると全部足して表示してくれる。というメソッドです。
メソッドとは、なにかしらの処理をまとめ、その一連の処理に名前をつけたもの。を指します。

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

クラスメソッドとは、クラスオブジェクトから実行可能なメソッド
インスタンスメソッドとは、クラスのインスタンス(実体)に対して紐づけられるメソッド
引用元:コトバンク

なるほど。さっぱりわかりません。とりあえず先ほどのadditionをCalculation(計算)クラスの中に入れて実行してみます。

計算クラス(エラー)
class Calculation
    def addition(a, b, c, d, e)
        puts a + b + c + d + e
    end
end

addition(1,2,3,4,5)

実行結果はundefined method `addition' for Add:Class (NoMethodError)というエラーコードが出ました。
そんなメソッド存在しない。というエラーのようです。

クラスの中にあるメソッドを使用する

Calculationクラスに含まれているメソッドを外から勝手に使用することはできないみたいです。そこで登場するのがクラスメソッドです。
クラスメソッドの定義はメソッド名の前にself.を加え、呼び出すときにはクラス名.メソッド名で呼び出します。早速やってみましょう。

計算クラス
class Calculation
    def self.addition(a, b, c, d, e)
        puts a + b + c + d + e
    end
end

Calculation.addition(1,2,3,4,5)

15が出力されました。どうやら成功したようです。

インスタンスメソッドは?

結論から言うとクラスの中にメソッドを作成するとそれがインスタンスメソッドになります。

宣言
class クラス名

  def メソッド名(変数1, 変数2, ...)
    処理
  end

end

インスタンスメソッドは、クラスのインスタンスに機能として搭載されているものです。
先ほどの計算クラス(エラー)となってしまったコードは、インスタンスを作り、作ったインスタンスに対してメソッドを呼び出せばエラーを吐きません。

計算クラス(インスタンス)
class Calculation
    def addition(a, b, c, d, e)
        puts a + b + c + d + e
    end
end
calculation = Calculation.new()
calculation.addition(1,2,3,4,5)

これで15と表示されるようになった。

まとめ

  • メソッドとは、それを実行すると何かしらの処理を行ってくれる
  • インスタンスメソッドもクラスメソッドもメソッド
  • クラスメソッドはself.メソッド名で作成。使用するにはクラス名.メソッド名で
  • インスタンスメソッドはクラスにメソッドを作成するとそれがインスタンスメソッドとなる。特に追加で記述する必要はない
  • インスタンスメソッドを使用するにはインスタンスを作成(.new)しなければならない

イメージ図
image.png

実践編

クラスメソッド、インスタンスメソッド。いつ使うのか。

380
284
10

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
380
284