【Ruby】クラスメソッド

ABOUTこの記事をかいた人

気になること&知らないことをひたすらググることを得意としています。このブログでは最近気になったことを中心に記事を書いていきます。記事には間違った情報を書かないように細心の注意を払っていますが、もし誤りがあった場合はコメントやお問い合わせフォームからご指摘いただければ幸いです。

クラスは処理内容を定義した設計図、いわば型枠のようなものでその型枠自体の処理内容をクラスメソッドで決めていきます。クラスメソッドはクラス自体をレシーバとしているので「クラス名.メソッド名」と記述すればクラスから直接呼び出しを行うことができるメソッドとなります。

クラスメソッドの作り方は大きく分けて2種類ありますが、まずは特異クラス定義という記述でクラスメソッドを作ってみます。

特異クラス定義

この定義の仕方を特異クラス定義(形式)と呼びます。それでは例としてクラスメソッドを作っていきましょう。

HelloRuby Class

これで無事「HelloRuby(クラス名).info(メソッド名)」で処理を呼び出すことができるようになりました。今回の場合は単にクラス名を表示させるクラスメソッドを作ってみました。

また、「self」を使ってクラスメソッドを作ることもできます。「self」はレシーバを指すので今回の場合、infoメソッドが呼ばれた際のレシーバはクラス自身である「HelloRuby」ということになります。

HelloRuby Class

ちなみに「class << クラス名」と記述すれば、クラス定義(class クラス名 ~ end)の外にもクラスメソッドを記述することができますが、「class << self」と記述してクラス定義の外に書いてしまうと「self」が何を指しているのかわからなくなるのでクラスメソッドの定義はできません。

特異メソッド

特異メソッド(形式)でクラスメソッドを定義する場合は下記のような記述を行います。

具体的には下記のように記述をしていきます。

HelloRuby Class

また、この記述方法もさっきと同じように「self」を使って書くこともできますが、「self」を使った場合はクラス定義の外には記述できないので注意が必要です。

クラス変数

クラス変数とはクラス全体で値を共有、保持できる変数のことをいいます。クラス変数は「@@変数」といった記述をします。今回は例としてオブジェクトが定義された回数をカウントするスクリプトをみていきましょう。

0回
3回

クラスを「newメソッド」で初期化した際には「initializeメソッド」が自動的に呼び出されるのでそれを利用して「@@count」に呼び出しの都度1をプラスしています。今回は3回「newメソッド」でオブジェクトを定義しているので、無事17行目では「3回」と出力されましたね。

定数

クラス内では定数も変数と同じように定義できます。定数は大文字から始めるという決まりがあり、慣習的には全て大文字といった記述がされていることが多いです。

1.0
1.0
1.0

クラス内で定義した定数は「クラス名::定数」のような書き方を行えばクラスの外から呼び出すことが可能です。また、クラスメソッドやインスタンスメソッドからも普通に呼び出せます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

気になること&知らないことをひたすらググることを得意としています。このブログでは最近気になったことを中心に記事を書いていきます。記事には間違った情報を書かないように細心の注意を払っていますが、もし誤りがあった場合はコメントやお問い合わせフォームからご指摘いただければ幸いです。