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

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

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

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

Q&A

3回答

462閲覧

ruby における selfの使い方

wxtu1DNiT78DmhJ

総合スコア5

Ruby

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

0グッド

0クリップ

投稿2019/10/20 11:00

progateのrubyをやっているruby初心者です、rubyにおけるselfの使い方がイマイチよくわかりんません、ご教授願います。

class Menu
attr_accessor :name
attr_accessor :price

initializeメソッドを定義してください

def initialize
self.name = "ピザ"
self.price = 800
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

のようなコードです。よろしくお願いします。

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

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

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

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

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

guest

回答3

0

あまりいいコードじゃないので、参考にしないほうがいいと思いますが。

selfは、「今、メソッドが操作対象にしているオブジェクト」を指します。

def initializeは、オブジェクトを作る処理を書く部分ですが、その中のselfは今作っている途中のオブジェクトを示します。

infoget_total_priceのメソッドは、foo.infoのように呼び出しますが、この時のfooの指すオブジェクトがinfoの処理対象になり、infoの中ではselfで参照します。

基本的な概念なので、入門書などでちゃんと解説されているはずです。それを読んでわからなかったということであれば、どの辺がどういう風にわからないと書かかないと、入門書の解説と同じ内容を回答されて、「やっぱり分からない」となりがちです。

投稿2019/10/20 11:42

otn

総合スコア84559

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

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

0

Rubyのselfはオブジェクトそのものを示しています。
そのため、質問者様の場合ですとinfoメソッドの場合、使うケースとしては例として

@menu = Menu.new @menu.info #=> "ピザ 800円"

というような形になると思います。
これはinitializenamepriceをハードコーディングしてしまっているためです。
柔軟性を持たせるとしたら

def initialize(params = {}) self.name = params[:name] self.price = params[:price] end

というようにしましょう。

そうした場合の使い方としては

@menu = Menu.new(name: 'パスタ', price: 700) @menu.info #=> "パスタ 700円"

のような使い方になると思われます。

投稿2019/10/20 11:20

haneru

総合スコア440

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

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

0

selfというのは、classの中で自分のclassのことを指します。
initialize関数で、self.nameとself.primeという変数を定義しています。
これは、classのデータの中にnameとprimeという変数を作ったということです。
そして、info関数で、self.nameとself.primeという形で呼び出しています。
最初の方は、classの中で使える(classの外からでも呼び出せるけど)変数だと思えばいいと思います。

間違っている表現があったら、すみません。

投稿2019/10/20 11:16

light180

総合スコア161

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

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

otn

2019/10/20 11:36

nameやpriceは変数じゃなくてメソッドです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問