クラス(class)を用いて、メソッドや変数をひとつにまとめておくことができます。
以下から Ruby のクラス(class)の使い方を解説していきます。
目次
クラス(class)とは? クラス(class)の意味
「クラス(class)」は、オブジェクト(インスタンス)を作成するための設計図にあたり、メソッドや変数をひとつにまとめたものです。
クラスからオブジェクト(インスタンス)を作成することで、定義しておいたメソッドや変数を実際に扱えるようになります。
クラスやメソッド、オブジェクト(インスタンス)の関係はオブジェクト指向の考え方になります。詳しい解説はこちら。
クラス(class)の使い方 一覧
クラスの使い方を、実際のプログラム例を紹介しながら解説していきます。
クラス(class)の作成
クラスは以下のように定義します。class
と end
の行の間に、クラス内で使う変数やメソッドを書きます。
class クラス名
クラス内で使う変数やメソッド
end
以下は「User」クラスを作成する例。
class User
end
今回はクラスを定義しただけなので、プログラムを実行しても何も起きません。
クラス(class)からインスタンスを作成する
定義したクラスを使う場合は、クラスをもとにインスタンスを作成する必要があります。
インスタンスは以下のようにして作成します。
クラス名.new
以下は「User」クラスからインスタンスを作成する例。
class User
end
user = User.new
p user
class User 〜 end
でクラスを定義し、user = User.new
でクラスからインスタンスを作成して「user」という名前の変数に代入しています。
その後、p user
で変数に代入された値を表示すると 見慣れない文字列が出てきますが、ひとまずこれでインスタンスが作成できたことが確認できます。以下はプログラムの実行結果例。
クラスとインスタンスの関係について、詳しい解説はこちら。
オブジェクト生成時に実行する処理を書く(initialize メソッドの使い方)
クラスの中で initialize メソッドを使うと、インスタンス作成時に実行したい処理を書くことができます。
class User
def initialize
p "インスタンスを作成しました"
end
end
User.new
"インスタンスを作成しました"
User.new
を実行して「User」クラスからインスタンスを作成しています。そのときに「initialize」メソッドの中の処理が実行されて、「オブジェクトを作成しました」という文字列が表示されます。
「initialize」メソッドには、以下のように引数を渡すこともできます。
class User
def initialize(user_name)
p "#{user_name}さん、こんにちは"
end
end
User.new("ゲスト")
"ゲストさん、こんにちは"
User.new("ゲスト")
のように、オブジェクトを作成するときに後ろにカッコ(( )
)をつけて引数を渡すことができます。今回は "ゲスト"
を引数としています。
指定した引数は def initialize(user_name)
で指定した「user_name」という変数に格納され、「initialize」メソッド内で使うことができます。
p "#{user_name}さん、こんにちは"
によって、引数の値が画面に表示されます。
メソッドや引数について詳しくはこちら。
クラスの中でメソッドを定義する
クラスの中にはメソッドを定義することができます。以下の例はメソッドの中でも「インスタンスメソッド」と呼ばれるものです。
class User
def login
p "こんにちは"
end
end
user = User.new
user.login
"こんにちは"
user = User.new
で「User」クラスからインスタンスを作成し、それを「user」変数に入れています。
次に、作成したインスタンスからドット(.
)で繋げてメソッド名を指定すると、クラス内で定義したインスタンスメソッドを呼び出すことができます。今回のプログラムでは user.login
で「login」メソッドの中の処理が実行されて、「こんにちは」という文字列が表示されます。
以下のようにして、メソッドに引数を渡すこともできます。
class User
def login(user_name)
p "#{user_name}さん、こんにちは"
end
end
user = User.new
user.login("ゲスト")
"ゲストさん、こんにちは"
メソッドや引数の使い方について詳しくはこちら。
クラスの中で変数を定義する
クラスの中では変数を定義することができます。以下の例は変数の中でも「インスタンス変数」と呼ばれるものです。
class User
def initialize
@user_name = "ゲスト"
end
def display_current_user
p @user_name
end
end
user = User.new
user.display_current_user
"ゲスト"
user = User.new
で「User」クラスからインスタンスを作成し、それを「user」変数に入れています。そのときに「initialize」メソッドの中の処理が実行され、@user_name = "ゲスト"
で @user_name
という変数に "ゲスト"
が格納されます。
次に user.display_current_user
で「display_current_user」メソッドが呼び出され、p @user_name
が実行されて、@user_name
の値である「ゲスト」が画面に表示されます。
@user_name
のようにして変数名の手前に @
をつけると、インスタンスの中であれば、その変数を他のメソッドからでも呼び出せるようになります。これを「インスタンス変数」と言います。今回の例では、@user_name
は「initialize」メソッドと「display_current_user」メソッドの両方から共有して使えることがわかります。
クラスを継承する
クラスの継承をすると、別のクラスのメソッドを引き継いで使うことができるようになります。
以下の例は、「User」クラスを継承して「Japanese」クラスを作成する例。
class User
def initialize
@user_name = "ゲスト"
end
def display_current_user
p @user_name
end
end
class Japanese < User
def hello
p "こんにちは"
end
end
user = Japanese.new
user.display_current_user
user.hello
"ゲスト"
"こんにちは"
class Japanese < User
のように、クラスを宣言するときに後ろに < 継承したいクラス名
をつけることで、指定したクラスを継承できます。今回の場合だと、継承元である「User」クラスの中の「initialize」や「display_current_user」メソッドが、継承先の「Japanese」クラスでも使えるようになっています。
そのため、user = Japanese.new
で「Japanese」クラスからインスタンスを作成したときに「User」クラスの「initialize」メソッドの中の処理が実行されます。
また、user.display_current_user
では、「User」クラスの「display_current_user」メソッドの中の処理が実行されます。
user.hello
では、もちろんインスタンスを作成した元となる「Japanese」クラスの「hello」メソッドが実行されます。
クラスの継承について詳しくはこちら。
まとめ
以上、Ruby でのクラス(class)の使い方でした!
ここまでの内容をまとめておきます。
- クラスは、オブジェクト(インスタンス)を作成するための設計図にあたり、メソッドや変数をひとつにまとめたもの。クラスを作成するときは、
class クラス名 〜 end
のように記述する。 - クラスからオブジェクト(インスタンス)を作成することで、定義しておいたメソッドや変数を使える。クラスからインスタンスを作成するときは、
クラス名.new
のように記述する。 - クラスの中で initialize メソッドを使うと、インスタンス作成時に実行したい処理を書くことができる。
- クラス内では
def メソッド名 〜 end
のようにしてインスタンスメソッドを定義することができ、インスタンス.メソッド名
で呼び出せる。 @変数名
のようにして変数名の手前に@
をつけると、インスタンスの中であれば、その変数を他のメソッドからでも呼び出せる。- クラスを宣言するときに後ろに
< 継承したいクラス名
をつけることで、指定したクラスを継承することができ、別のクラスのメソッドを引き継いで使える。