0
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

##はじめに
Progateで学習したRubyの内容を自分なりにまとめておく。

##クラスとインスタンス
「もの」を作る際の「設計図」をクラス、「もの」をインスタンスと呼ぶ

1. クラスを用意する
2. クラスからインスタンスを生成する
3. インスタンスに情報を追加する

# 1. クラスの用意
class クラス名
  attr_accessor :シンボル  # この情報のことをインスタンス変数という
  def メソッド名 # インスタンスメソッド
     処理
     #{self.変数名} # インスタンス変数を使うことができる
  end
end

# 2. インスタンスの生成
インスタンス名 = クラス名.new

# 3. インスタンスに情報を追加する
インスタンス.変数名 = 

###インスタンスの初期化
initializeメソッド
クラス名.newが実行されると、空のインスタンスが生成される。
initializeメソッドがあれば、自動で呼び出される。

例)

class Menu
  attr_accessor :name
  attr_accessor :price

  def initialize(name:, price:) # initializeメソッドに引数を渡す。
    self.name = name
    self.price = price
  end

  def info
    return "#{self.name} #{self.price}円"
  end

  def get_total_price(count)
    total_price = self.price * count
    if count >= 3
      total_price -= 100
    end
    return total_price
  end
end

menu1 = Menu.new(name:"すし", price:1000)
puts menu1.info

##ファイルの分割
index.rb(プログラムの実行部分)とmenu.rb(クラスの定義部分)にファイルを分割する。

index.rb
require "./menu"  # menu.rbの読み込み
menu1 = Menu.new(name:"pizza", ...)
...
menu.rb
class menu
  attr_accessor :name
  attr_accessor :price
  ...
end

###入力を受け取る
gets.chompを用いることで、コンソールが入力待機状態となる

変数 = gets.chomp  # とすると入力された情報を文字列として受け取る
変数 = gets.chomp,to_i  # とすることで、数値に変換することもできる

###ファイル分割の例

index.rb
require "./menu"

menu1 = Menu.new(name: "ピザ", price: 800)
menu2 = Menu.new(name: "すし", price: 1000)
menu3 = Menu.new(name: "コーラ", price: 300)
menu4 = Menu.new(name: "お茶", price: 200)

menus = [menu1, menu2, menu3, menu4]

index = 0
menus.each do |menu|
  puts "#{index}. #{menu.info}"
  index += 1
end

puts "--------------"
puts "メニューの番号を選択してください"

order = gets.chomp.to_i
selected_menu = menus[order]

puts "選択されたメニュー: #{selected_menu.name}"
puts "個数を入力してください(3つ以上で100円割引)"

count = gets.chomp.to_i
puts "お会計は#{selected_menu.get_total_price(count)}円です"
menu.rb
class Menu
  attr_accessor :name
  attr_accessor :price

  def initialize(name:, price:)
    self.name = name
    self.price = price
  end

  def info
    return "#{self.name} #{self.price}円"
  end

  def get_total_price(count)
    total_price = self.price * count
    if count >= 3
      total_price -= 100
    end
    return total_price
  end
end

##継承
あるクラスを基にして新たなクラスを作ることを「継承」という

class 子クラス < 親クラス
  attr_accessor :シンボル # 子クラスにインスタンス変数を追加する
  def メソッド名 # 子クラスにインスタンスメソッドを追加する
                # 子クラスで親クラスを同じ名前のメソッドを定義すると、子クラスの方が呼び出される(オーバーライド)
     super(シンボル名: 引数) # 親クラスの同名メソッドを呼び出す
     処理
  end
end

###クラスメソッド
クラスに対して呼び出すメソッド

def クラス名.メソッド名
  処理
end
クラス名.メソッド名 # で呼び出す

###インスタンスメソッドの定義
インスタンスに対して呼び出す

def メソッド名

###継承の例
Menuクラスを継承

food.rb
require "./menu" # 親クラスの読み込み

class Food < Menu # 子クラスの定義
  attr_accessor :calorie # 子クラスのインスタンス変数

  def initialize(name:, price:, calorie:) # オーバーライド
    super(name: name, price: price) # 親クラスの同名メソッドを呼び出す
    self.calorie = calorie
  end

  def info # オーバーライド
    return "#{self.name} #{self.price}円 (#{self.calorie}kcal)"
  end

  def calorie_info
    return "#{self.name}#{self.calorie}kcalです"
  end
end

##おわりに
次回はデータベースの基礎についてまとめようと思う。

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