LoginSignup
1

More than 5 years have passed since last update.

ruby 基本文法

Posted at

progateのbubyクラスの「料理注文システムを作ろう!」

のまとめ。
本当に基本的なところだからしっかり理解しようと思う。
まずはクラスから。

クラス

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

インスタンス変数

クラスに情報を持たせるには、下記のようなインスタンス変数を作らなければいけない。

attr_accessor:シンボル

例:attr_accessor:name
この場合、nameをインスタンス変数と呼ぶ。

initializeメソッド

initializeメソッドは、「クラス.new」でインスタンスを生成した直後に自動で呼び出されるもの。
例:

test.rb
class Test 
  def initialize
    puts "おはよう"
  end
end
test1 = Test.new

コンソール結果

おはよう

と出力される。

インスタンスメソッド

クラスの中で定義して、インスタンスに対して呼び出すメソッドのこと。
例:

test.rb
class Test
  def sample(age)
    return "私は#{age}歳だ。"
  end
end
test = Test.new
puts test.sample(20)

コンソール結果

私は20歳だ。

クラスを呼び出す方

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に代入してください
order = gets.chomp.to_i

# 選択されたメニューのインスタンスを変数selected_menuに代入してください
selected_menu = menus[order]

# 「選択されたメニュー: ○○」となるように出力してください
puts "選択されたメニュー:#{selected_menu.name}"

puts "個数を入力してください(3つ以上で100円割引)"

# 入力を数値として受け取って変数countに代入してください
count = gets.chomp.to_i

# 「お会計は○○円です」となるように出力してください


puts "お会計は#{selected_menu.get_total_price(count)}円です"

each文

配列.each do |変数|
  #したい処理
end 

gets.chomp

このコードが実行されると、コンソールが待ち状態となる。

test = gets.chomp

とすることでエンターキーを押すまでに入力されたものがtestに代入される。

またこの場合は数字でも文字列として取得してしまうので、数値として取得したい場合は

test = gets.chomp.to_i

といった感じにする。

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