ruby/クラスとインスタンス

最近勉強ばっかりで書いてなかったので書こうかなと。

今日はrubyのクラスとインスタンスについて書こうかなと思うよ。

 

クラスとは

とある種類のオブジェクトにおける、共通の属性とメソッドをまとめて定義しておく型のようなもの。

ある属性のクラスからインスタンスを作成し、そのインスタンスで処理を行います。

これによってインスタンスの一貫性が生まれます。

 

さて全くわからん!なんのことだよって感じなんで、次はインスタンスについて調べます。

 

インスタンスとは

クラスに基づいて生まれたオブジェクトのことインスタンスと言います。

とにかくクラスが先。クラスからインスタンスが生まれます。

 

なんて言われてもやっぱりわからんよね・・。

ということでいつも通りとりあえず書いてみます。

 

 

class Fruits
@@fruits = "果物"#クラス変数

#Fruitsクラスのインスタンスメソッドsay_fruits
def say_fruits
puts "私は#{@@fruits}です。" #クラス変数はクラス内部であればどこでも呼び出すことができる。
end

#Fruitsクラスのインスタンスメソッドinitialize。initializeはクラスが生み出された時に同時に実行される。
def initialize
@name = "メロン"
@color = "緑"
end

#インスタンスメソッドに対してクラスメソッドと呼ばれる。
def self.taste
puts "甘いよ"
end

#クラス内部でのインスタンスメソッドでは、インスタンス変数を用いることができる。
def self_introduction
puts "私は#{@name}で色は#{@color}です。"
end

end

fruits = Fruits.new
fruits.say_fruits
Fruits.taste
fruits.self_introduction

こんな感じ。

ちなみに実行結果ははこんな感じ。

私は果物です。
甘いよ
私はメロンで色は緑です。

 

一個一個何してるかというと、まずこれ

class Fruits
@@fruits = "果物"#クラス変数
end

Fruitsというクラスを定義しています。

同時にこのクラス内でクラス変数@@fruitsを使うと、"果物"がかえってくるようにしてます。クラス変数は、fruitsクラスの内部であればどこでも使用可能です。

ちなみにクラスには継承というものもあるので、継承先でもクラス変数が使えます。

 

 

#Fruitsクラスのインスタンスメソッドsay_fruits
def say_fruits
puts "私は#{@@fruits}です。" #クラス変数はクラス内部であればどこでも呼び出すことができる。
end
frtuisクラス内部でインスタンスメソッドsay_fruitsを定義しています。
出力としては、クラス変数@@fruitsを出力することになります。
普段何気なく使ってるdefによるメソッド定義ですが、必ずクラスの内部に作成されている・・らしい。そんな実感ないけど・・・
 
 
#Fruitsクラスのインスタンスメソッドinitialize。initializeはクラスが生み出された時に同時に実行される。
def initialize
@name = "メロン"
@color = "緑"
end
initializeメソッドを定義。
インスタンスを作成するために、Fruits.new(後述)をするんだけど、その時に同時にinitializeメソッド内の処理をしてくれるっていう省エネ感が特徴。
ここではインスタンス変数@nameと@colorに"メロン"と"緑"を代入します。

ちなみにインスタンス変数はクラスのインスタンスにおいて使用することができます。

 

#インスタンスメソッドに対してクラスメソッドと呼ばれる。
def self.taste
puts "甘いよ"
end

self.(メソッド名)でクラスメソッドを定義できます。

クラスメソッドはクラス変数にアクセスするときに用いることが多いそうです。

例えば、外部ファイルからデータを取得してインスタンスを作成するときとか・・・らしい。

ここでは実行することで"甘いよ"って言います。果物のくせに生意気ですね。

 

#クラス内部でのインスタンスメソッドでは、インスタンス変数を用いることができる。
def self_introduction
puts "私は#{@name}で色は#{@color}です。"
end

最後にまたインスタンスメソッド。インスタンスメソッドでは、別のインスタンスメソッドで使われたインスンタンス変数を使うことができます。

ここでは"私はメロンで色は緑です。"と自己紹介します。果物のくせに生意気ですね。

 

これらは書いただけでは実行されず、下記の通りに記載することで初めて実行されます。

fruits = Fruits.new
fruits.say_fruits
Fruits.taste
fruits.self_introduction

furits = Fruits.newにより、fruitsというインスタンスが作成されます。

まずこのコマンドによってインスタンスを作成する必要があります。

その後は、

インスタンスメソッドであれば(インスタンス名).(インスタンスメソッド名)と書くことによって

クラスメソッドであれば(クラス名).(クラスメソッド名)と書くことで実行されます。

途中で出てきたinitializeメソッドは、Fruits.newと同時に実行されるので省略されます。

 

こんな感じか。

噛み砕くためにクラスという単語とインスタンスという単語を努めて使わないという初心は開始数行で消えました。