4
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.

クラスとインスタンス

Last updated at Posted at 2021-01-19

#クラスとは?
設計図や料理のレシピのような物です。新しい物を作るのにその度に一から作るのは手間と時間がかかります。
それを避けるために、共通のルールを守った上で個別のデータを作ることが出来るようにする物です。
クラスは共通の処理と属性を決めるだけで、単体でデータを扱うことはできません。

class クラス名
  # 変数やメソッドの定義
end

今回はジャムを作るJamクラスを定義して見ましょう。

class Jam

end

##インスタンスとは
実際に作られる『もの』のことです。
クラスを定義しましたがクラスだけでは何のデータも持ちません。
データを持つインスタンスをクラスから生成します。
クラスは定義しなくてもnewというメソッドを始めから持っていてこれを実行することで
データを持つインスタンスが生成されます。

インスタンスを生成したあとからデータを追加したり、メソッドを実行できるようにするために
変数に代入して作ります。

変数名 = クラス名.new

実際にインスタンスを生成してみると

class Jam

end

strawberry_jum = Jam.new

今はレシピに何も書かれていないので空の状態です。

##インスタンスメソッド
名前の通りインスタンスが使用できるメソッドでクラスに記述します

class クラス名
  def メソッド名
    # 処理
  end
end

実際にインスタンスメソッドを定義してみましょう。

class Jam
  def make_jam
   #処理を記入
  end
end

strawberry_jum = Jam.new
strawberry_jum.make_jam

まだメソッドの中身を定義していないので何も起きません。(後ほど中身を記入して使います。)

#インスタンス変数
データの持つ属性を定義する物です。
定義しておくことで全てのインスタンスは同じ属性を持ちますが
それぞれ異なる値を設定することができます。
例えば同じ『ボール』という属性を定義したとしても値は『サッカーボール』や『バスケットボール』や『野球ボール』と様々な値がありますよね。

変数の頭に@をつけてこのように定義します。

class クラス名
  def メソッド名
    @変数名 = 値  # インスタンス変数
  end
end

インスタンス変数のスコープは、そのクラスのすべてのインスタンスメソッドなのでインスタンスの全ての動作に使用できます。

##initializeメソッド
インスタンスが生成されると同時に、定義した処理が実行されるインスタンスメソッドです。
今回の場合newメソッドでインスタンスが作られた時に同時に生成されます

インスタンス変数とinitializeメソッドを使ってみましょう。

class Jam
  def initialize(jam_taste,jam_color,jam_price) #渡した引数が代入される
    @taste = jam_taste    #jam_tasteにstrawberryが代入されている
    @color = jam_color    #jam_colorにredが代入されている
    @price = jam_price    #jam_priceに300が代入されている
  end

  def make_jam
  end
end

strawberry_jum = Jam.new('イチゴ','赤',300)#引数を渡す
strawberry_jum.make_jam

インスタンスメソッドmake_jamに処理を記述して使ってみましょう。

class Jam
  def initialize(jam_taste,jam_color,jam_price) 
    @taste = jam_taste 
    @color = jam_color   
    @price = jam_price    
  end

  def make_jam
    puts "#{@taste}味のジャムを作ります。色は#{@color}色で値段は{@price}円です"
  end

    strawberry_jum = Jam.new('イチゴ','赤',300)
    strawberry_jum.make_jam  #イチゴ味のジャムを作ります。色は赤色で値段は300円です と出力される。
end

ちなみに、みかん味のジャムが作りたくなったらどうするかというと

class Jam
  def initialize(jam_taste,jam_color,jam_price) 
    @taste = jam_taste 
    @color = jam_color   
    @price = jam_price    
  end

  def make_jam
    puts "#{@taste}味のジャムを作ります。色は#{@color}色で値段は{@price}円です"
  end

    strawberry_jum = Jam.new('イチゴ','赤',300)
    strawberry_jum.make_jam  
    
    orange_jum = Jam.new('みかん','オレンジ','250')
    orange_jum.make_jum #みかん味のジャムを作ります。色はオレンジ色で値段は250円です と出力される。

end

このようになります。

##クラスメソッド
クラスで共通した処理を定義したい時に使います。
メソッド名の頭に self をつけて定義します

class クラス名
  def self.メソッド名
    # 処理
  end
end

実際に使ってみましょう。

class Jam
  def self.use
   puts "パンに塗って使います"
  end

  def initialize(jam_taste,jam_color,jam_price) 
    @taste = jam_taste 
    @color = jam_color   
    @price = jam_price    
  end

  def make_jam
    puts "#{@taste}味のジャムを作ります。色は#{@color}色で値段は{@price}円です"
  end

    strawberry_jum = Jam.new('イチゴ','赤',300)
    strawberry_jum.make_jam  
    
    orange_jum = Jam.new('みかん','オレンジ','250')
    orange_jum.make_jum #みかん味のジャムを作ります。色はオレンジ色で値段は250円です と出力される。
   
    Jam.use #パンに塗って使います と出力される。
    
end

以上です。

4
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
4
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?