質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

2062閲覧

ProgateのRuby学習コースⅣのコードについて

dedede_daiou

総合スコア10

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

2クリップ

投稿2020/03/08 07:23

編集2020/03/08 07:24

ProgateのRuby学習コースを始めたばかりなのですが
Ⅳのコードで不明点があります。
どなたか教えていただけないでしょうか。

index.rbの一番最後の行
puts "お会計は#{selected_menu.get_total_price(count)}円です"
↑この部分なのですが
なぜ、#{get_total_price(count)}ではなく#{selected_menu.get_total_price(count)}としないといけないのでしょうか。

Ruby

1# index.rb 2 3require "./menu" 4 5menu1 = Menu.new(name: "ピザ", price: 800) 6menu2 = Menu.new(name: "すし", price: 1000) 7menu3 = Menu.new(name: "コーラ", price: 300) 8menu4 = Menu.new(name: "お茶", price: 200) 9 10menus = [menu1, menu2, menu3, menu4] 11 12index = 0 13menus.each do |menu| 14 puts "#{index}. #{menu.info}" 15 index += 1 16end 17 18puts "--------------" 19puts "メニューの番号を選択してください" 20 21# 入力を数値として受け取って変数orderに代入してください 22order = gets.chomp.to_i 23 24# 選択されたメニューのインスタンスを変数selected_menuに代入してください 25selected_menu = menus[order] 26 27# 「選択されたメニュー: ○○」となるように出力してください 28puts "選択されたメニュー: #{selected_menu.name}" 29 30puts "個数を入力してください(3つ以上で100円割引)" 31 32# 入力を数値として受け取って変数countに代入してください 33count = gets.chomp.to_i 34 35# 「お会計は○○円です」となるように出力してください 36puts "お会計は#{selected_menu.get_total_price(count)}円です" 37

Ruby

1# menu.rb 2 3class Menu 4 attr_accessor :name 5 attr_accessor :price 6 7 def initialize(name:, price:) 8 self.name = name 9 self.price = price 10 end 11 12 def info 13 return "#{self.name} #{self.price}円" 14 end 15 16 def get_total_price(count) 17 total_price = self.price * count 18 if count >= 3 19 total_price -= 100 20 end 21 return total_price 22 end 23end 24
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

学習コースを始めたばかりということですが、クラス、オブジェクト、インスタンスメソッド、クラスメソッドなどについては、まだ学んでいないのでしょうか?

そのあたりを学ぶと、疑問が解消すると思います。

投稿2020/03/08 07:36

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dedede_daiou

2020/03/08 07:52

クラスはここでいう、Menuで インスタンスメソッドはMenuの中でdefで宣言されているもの との認識です。 オブジェクト、クラスメソッドは初めて聞きました。 selected_menu.nameなどは理解できるのですが selected_menuとget_total_price(count)の関係性が理解できません。
otn

2020/03/08 08:01

> インスタンスメソッドはMenuの中でdefで宣言されているもの は、「インスタンスメソッドをどうやって記述するか」という方法の話ですね。 「インスタンスメソッドとは何なのか」を理解できていないのでは?
dedede_daiou

2020/03/08 08:42

インスタンスメソッドはインスタンスを生成しないと 呼び出すことができないから、でしょうか。 んー、難しいです。 selected_menuは変数で、menus[order]が格納されているだけのものではないのでしょうか。 total = Menu.new total.get_total_price(count) みたいなものだと腑に落ちやすいのですが。
otn

2020/03/08 08:48

> インスタンスメソッドはインスタンスを生成しないと呼び出すことができないから、でしょうか。 それはロジックが逆です。 「インスタンスメソッドを呼び出すために、インスタンスを作成する」と思っているのなら、それは大きな間違いです。 インスタンスがありきで、それを操作する方法がインスタンスメソッドです。 > selected_menuは変数で、menus[order]が格納されているだけのものではないのでしょうか。 menus[order] には何が入っていると思っていますか?
dedede_daiou

2020/03/08 09:04 編集

あー、なるほど! menus = [menu1, menu2, menu3, menu4]だから orderが0なら menu1 = Menu.new(name: "ピザ", price: 800) で、selected_menu = menus[order] だからですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問