クラスの中で定義できるメソッドには、クラスメソッドとインスタンスメソッドがあります。
以下から Ruby のクラスメソッドとインスタンスメソッドの使い方を解説していきます。
目次
クラスメソッドとインスタンスメソッドの違い
クラスメソッドとインスタンスメソッドは、どちらもクラスの中に書きますが、以下のように呼び出し元に違いがあります。
- クラスメソッドは、クラスから実行できる。
- インスタンスメソッドは、インスタンスから実行できる。
クラスとインスタンスの関係について詳しくはこちら。
そのため、クラスメソッドは クラスから直接呼び出すことができるのに対して、インスタンスメソッドは クラスからインスタンスを生成しないと呼び出すことができません。
以下からクラスメソッドとインスタンスメソッドについて、ひとつずつ詳しく解説していきます。
クラスメソッド
クラスメソッドの特徴
- クラスメソッドは、クラスから実行できるメソッド。
- メソッドは、クラス内で
def self.メソッド名 〜 end
で定義できる。 クラス名.メソッド名
で呼び出せる。
プログラム例 その1
以下はクラスメソッドを定義し、それを呼び出す例。
class User
def self.hello
p "こんにちは"
end
end
User.hello
"こんにちは"
User.hello
で、クラス内のメソッドが呼び出せることが確認できました。
プログラム例 その2
メソッドを class << self 〜 end
で囲むと、メソッド名の先頭に self.
をつけない形でクラスメソッドを作ることもできます。
class User
class << self
def hello1
p "こんにちは1"
end
def hello2
p "こんにちは2"
end
end
end
User.hello1
User.hello2
"こんにちは1"
"こんにちは2"
クラスメソッドの用途
クラスメソッドは、クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利です。
例えば「User」クラスを作成した場合を例にするなら、ユーザー一覧の表示や、ユーザー全体で共有して使うステータスを更新するメソッドを作成するときに使うと良いでしょう。
インスタンスメソッド
インスタンスメソッドの特徴
- インスタンスメソッドは、インスタンスから実行できるメソッド。
- メソッドは、クラス内で
def メソッド名 〜 end
で定義できる。 インスタンス.メソッド名
で呼び出せる。
プログラム例
以下はインスタンスメソッドを定義し、それを呼び出す例。
class User
def hello
p "こんにちは"
end
end
user = User.new
user.hello
"こんにちは"
user = User.new
で「User」クラスからインスタンスを作成し、「user」変数に代入しています。
次に user.hello
でインスタンスからメソッドが呼び出せることが確認できました。
ちなみに今回定義した「hello」メソッドはインスタンスメソッドなので、User.hello
のようにして、クラスから呼び出すことはできません。
インスタンスメソッドの用途
インスタンスメソッドは、個別のインスタンスに関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利です。
例えば「User」クラスを作成した場合を例にするなら、特定のユーザーインスタンスのプロフィールを表示したり更新したりするメソッドを作成するときに使うと良いでしょう。
まとめ
以上、Ruby のクラスメソッドとインスタンスメソッドの使い方でした!
ここまでの内容をまとめておきます。
- クラスメソッドはクラスから実行でき、インスタンスメソッドはインスタンスから実行できる。
- クラスメソッドは、クラス内で
def self.メソッド名 〜 end
で定義することができ、クラス名.メソッド名
で呼び出せる。 - インスタンスメソッドは、クラス内で
def メソッド名 〜 end
で定義することができ、インスタンス.メソッド名
で呼び出せる。 - クラスメソッドは クラス全体に関わる情報を変更したり 参照したりするメソッドを作成するときに、インスタンスメソッドは 個別のインスタンスに関わる情報を変更したり 参照したりするメソッドを作成するときに使うと便利。