1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby  クラスとインスタンス学習まとめ

Posted at

クラスとインスタンス

Rubyにはあらかじめ決まった値が設定されています。
例えば、文字列や配列、ハッシュ等のことですが、独自に値を作ることができ、そのために必要な概念がクラスとインスタンスです。
値は種類ごとに使用できるメソッドが異なっており、文字列に対しては、このメソッド、数値に対してはこのメソッドといった具合にルールが決められています。
このような共通のルールを作成するのに「クラス」を使用します。
この共通したルールを元にして実体(値、データ)を作成していく、つまりはこの実体がインスタンスと呼ばれるものです。

なぜ、クラスが必要なのか
それは、共通の部分を再利用していくことができるからです。

####クラスとインスタンスの生成

class Takoyaki

end

hokuhoku = Takoyaki.new

Takoyakiというクラスを定義し、Takoyakiの実体(インスタンス名:hokuhoku)をnewメソッドで作成しています。
Takoyakiという設計図の中身は何も有りませんが、これに様々なルールを追加してやることで、実体のhokuhokuに味を加えていくことができるのです。

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

独自に作成した値(データ)にはそれぞれ、動作(メソッド)を定義することができます。
メソッドにはクラスメソッドとインスタンスメソッドの2種類が存在します。

まず、インスタンスメソッドですが、クラスの中に普通のメソッドのように定義してやります。

class Takoyaki

def takoyaki_create
end

end

hokuhoku = Takoyaki.new
hokuhoku.takoyaki_create

これで、Takoyakiクラスの中に、takoyaki_createというインスタンスメソッドが作成できました。
これで、hokuhoku.takoyaki_createと記載することで、インスタンスメソッドを呼び出すことができるようになります。

インスタンス変数

クラス内のインスタンスメソッドに属性値をもたせるために使う変数名で、変数の前に「@」をつける。

class Takoyaki

def takoyaki_create(num)
  @num = num
end

end

hokuhoku = Takoyaki.new
hokuhoku.takoyaki_create(5)

インスタンス変数@numは、クラス内のすべてのインスタンスメソッド内で使用することができます。
つまり、インスタンス変数のスコープ(変数が使用できる範囲)はクラス内のすべてのインスタンスメソッド内ということになります。

#クラスメソッド
インスタンスメソッドが個別の情報を元に行う動作(メソッド)で、インスタンス名から呼び出すことができるメソッドであったのに対して、個別の情報によらず(インスタンス名によらず)に、どこからでも呼び出すことができるのがクラスメソッドです。

class Takoyaki

def self.eat
 puts"食べると、ほくほくしちゃう" 
end

def takoyaki_create(num)
  @num = num
end

end

hokuhoku = Takoyaki.new
hokuhoku.takoyaki_create(5)

Takoyaki.eat

これで、クラスメソッドを定義することができます。
クラスメソッドを定義する際は、クラスメソッド名の前にself.を記載します。
インスタンスメソッドと違って、メソッドの呼び出し方が異なっており、クラス名で呼び出すようになります。
クラスメソッドは、インスタンスを作成する必要がない(newメソッド不要)ので、そのままクラスから呼び出すことができます。

インスタンスを作成と同時にインスタンスが実行されるメソッド(initializeメソッド)

インスタンスをnewメソッドで生成した後に、インスタンスメソッドを呼び出さずに直ちに実行されるようにするメソッドをinitializeメソッドと言います。

class Takoyaki

def initialize(takoyaki_name, takoyaki_price)
 @name = takoyaki_name
 @price = takoyaki_price
end

def self.eat
 puts"食べると、ほくほくしちゃう" 
end

def takoyaki_create(num)
  @num = num
end

end

hokuhoku = Takoyaki.new("醤油たこ焼き", 400)
hokuhoku.takoyaki_create(5)

Takoyaki.eat

newメソッドでインスタンスを生成したと同時にinitializeメソッドが実行され、実引数("醤油たこ焼き", 400)がinitializeメソッドの仮引数に代入され、インスタンス名、「hokuhoku」に@name(="醤油たこ焼き")と@price(=400)という属性値が生成されました。

まとめ

  • クラスとインスタンスは独自の値(データ)を作成するために必要な概念である。
  • クラスを設計することで、共通のルールを使い回すことができるメリットがある。
  • 動作(メソッド)の種類としてクラスメソッドとインスタンスメソッドがあり、呼び出し方が異なる。
  • インスタンスとは、クラスの実体のことで、newメソッドを使用して生成することができ、クラス内のインスタンスメソッドをインスタンス名から呼び出すことができるようになる。
  • インスタンスの生成と同時にインスタンスを実行するメソッドをinitializeメソッドといい、インスタンスの生成とともに、属性値を与えることができる。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?