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

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

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

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

Q&A

解決済

1回答

1080閲覧

rubyのinitializeメソッド(インスタンス変数に引数の値を代入すること)について

kogurekyousou

総合スコア6

Ruby

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

0グッド

3クリップ

投稿2019/09/03 04:11

prograteでinitializeメソッドの部分でつまずきました。
どなたかご教授願います。以下、prograteからの引用です。
「下記の式のように、initializeメソッドでインスタンス変数に引数の値を代入することで、インスタンス毎にインスタンス変数の値を変えることができます。
その際に、キーワード引数を使うことで見やすく書くことができます。」

ruby

1class Menu 2 3attr_accessor :name 4atto_accessor :price 5 6 7def 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 16end 17 18menu1 = Menu.new(name: "すし", price: 1000) 19 20puts menu1.info 21

「initializeメソッドでインスタンス変数に引数の値を代入することで、インスタンス毎にインスタンス変数の値を変えることができます」とありますが、これが具体的にどういった意味なのかよくわかりません。
ここでいうインスタンス変数の値とは、この式でいうmenu1=Menu.new(name: "すし", price: 1000)の部分に当たるのでしょうか?
また、「インスタンス毎にインスタンス変数の値を変えることができます」とありますが、「インスタンス毎」とは、例えばmenu2という新しいインスタンスを作った際に、インスタンス変数の値を変えても問題がないということなのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

説明とプログラムの関係がわかりにくいですね。同じことを書きなすと、

Ruby

1class Menu 2 3 def initialize(name:, price:) 4 @name = name 5 @price = price 6 end 7 8 def info 9 return "#{@name} #{@price}円" 10 end 11 12end 13 14menu1 = Menu.new(name: "すし", price: 1000) 15 16puts menu1.info

で、わかるでしょうか。@name@priceがインスタンス変数です。

投稿2019/09/03 04:22

otn

総合スコア84499

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

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

kogurekyousou

2019/09/03 05:01

回答ありがとうございます!^^ 上記の説明を見るに、 ここでいうインスタンス変数は変数「self」が使われた変数ということで良いのでしょうか? また、「インスタンス毎にインスタンス変数の値を変えることができます」とありますが、具体的にはどういうことなのですか?(上記のプログラムを参考に説明してくださると助かります)
otn

2019/09/03 05:05

> ここでいうインスタンス変数は変数「self」が使われた変数ということで良いのでしょうか? 厳密には違います。インスタンス変数は変数名が @ から始まる変数です。 インスタンス変数が理解できるまで、self.name とかはいったん忘れましょう。 > また、「インスタンス毎にインスタンス変数の値を変えることができます」とありますが、 menu1 = Menu.new(name: "すし", price: 1000) menu2 = Menu.new(name: "どんぶり", price: 700) とすると、2つのインスタンスが作られ、それぞれのインスタンス変数 @name と @price は別の値です。
kogurekyousou

2019/09/04 02:22

理解できました!丁寧にありがとうございました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問