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

☆クラスメソッド

そもそもクラスとは何でしょうか?


クラスとは、オブジェクトの種類を表したものです。
つまり、複数のオブジェクト(インスタンス)の枠組みと捕らえてよいでしょう。


もっと分かりやすくするために、クラスが学級で、インスタンスが生徒としましょう。
生徒(インスタンス)は漏れなく学級(クラス)に属しています。


そして、学級(クラス)ごとのルールがあります。
生徒(インスタンス)は、学級(クラス)のルールに従って行動(メソッド)を起こします。
生徒(インスタンス)は、このルールによって、行動(メソッド)が限定されます。


つまり、インスタンスは、クラスによって使えるメソッドが違うということです。


では、クラスメソッドとは何でしょうか?


クラスに直接働きかけるメソッドのことです。

#studentクラスからAを探す
student.find("A")


???


噛み砕いて、学級の例で説明いたしましょう。


C組という学級(クラス)があります。
C組には太郎君、花子さんがいます。
つまり、太郎君、花子さんはインスタンスです。


C組の太郎君を探すメソッド

C.find("太郎君")

ここでのFindメソッドが、クラスメソッドと呼ばれるものです。


分かりましたでしょうか?


たとえば、C組の太郎君を廊下に立たせるためのメソッドというのはクラスメソッドではありません。
これは、次で説明するインスタンスメソッドです。


インスタンスメソッド

インスタンスメソッドとは、インスタンスに直接働きかけるメソッドのことです。


たとえば、

["1","2","3"].index(1)

indexメソッドは、Arrayクラスのインスタンスに直接働きかけています。


つまり、インスタンスメソッドです。


また、メソッドが働きかける先をレシーバといいまして、インスタンスメソッドはインスタンスがレシーバになります。
お分かりのとおり、クラスメソッドのレシーバはクラスとなります。


以上、簡単ではありますが、rubyにおけるメソッドの使い分けのまとめでございました。

お読み頂きありがとうございました。