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

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

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

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

277閲覧

戻り値とputsの違いがわからない

basashitosushi

総合スコア0

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2024/10/08 05:03

実現したいこと

戻り値とputsの違いがわからず苦戦しています。
戻り値とputsの違いを教えていただきたいです。

色んな記事を拝見しましたが、よくわからずに今に至ります。
(戻り値だけで1ヶ月以上理解に苦しんでいます)

発生している問題・分からないこと

以下の記事がわかりやすかったと教えていただいたのですが、
以下記事の初っ端から理解ができておらずです。

https://pikawaka.com/ruby/return-value

上記記事の「返り値(戻り値)とは、呼び出されたメソッドの処理を終了する際に呼び出し元に返す値のことです。」ですが、putsと何が違うのかが理解できません。

putsに関してもメソッドを呼び出して処理を呼び出し元に値を返していますよね?

戻り値とputs同じ結果と処理を返しているようにしか見えないのですが

該当のソースコード

Ruby

1class Menu 2 attr_accessor :name 3 attr_accessor :price 4 5 def info 6 return "#{self.name} #{self.price}円" 7 end 8 9 def get_total_price(count) 10 total_price = self.price * count 11 if count >= 3 12 total_price -= 100 13 end 14 return total_price 15 end 16end 17 18menu1 = Menu.new 19menu1.name = "ピザ" 20menu1.price = 800 21 22puts menu1.get_total_price(3)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

class Menu
attr_accessor :name
attr_accessor :price

def info
"#{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
menu1.name = "ピザ"
menu1.price = 800

puts menu1.get_total_price(3)

補足

return を外した状態でも結果は同じでした。
putsと何が違うのでしょうか?????涙涙涙涙涙涙涙

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

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

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

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

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

guest

回答1

0

putsに関してもメソッドを呼び出して処理を呼び出し元に値を返していますよね?

いえ、メソッドを呼び出すのはputsの機能ではありません

式の中にメソッドの呼び出しがあれば、メソッドが呼び出されて返り値が得られる、という流れは、puts書かなくても進んでいきます。

putsは、単にその結果を表示しているだけです。

投稿2024/10/08 05:04

編集2024/10/08 05:15
maisumakun

総合スコア145830

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

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

maisumakun

2024/10/08 05:05

> return を外した状態でも結果は同じでした。 はい、Rubyの場合、最後の行の「return 値」と「値」とだけ書くのは、全く同じ意味です(が、それはputs云々の話とは全く無関係です)。
maisumakun

2024/10/08 05:12

そもそも、ご提示のコードでもクラス内から結果を取れているのが「返り値」の機能で、putsは「得られた返り値」を表示しているだけです。
maisumakun

2024/10/08 05:17

「foo = menu1.get_total_price(3)」(呼び出した結果をいったん変数に代入する)と「puts foo」(結果の出力だけ行う)の2行にすれば、「putsがメソッド呼び出しを行うのではない」ことがはっきりわかりかと思います。
basashitosushi

2024/10/08 05:39 編集

ありがとうとざいます!!! やっと理解できそうな気がします。自分なりにわかりやすいようにまとめてみました。 ■「単に、コンソールへ出力しているだけです。」  上記の回答ですが、putsとreturnの違いですが、こういうことでしょうか?  -putsとは-  puts は学習や確認のために使うもので、実際にウェブ上に表示させるために使用するものではなく、 contoroller内(●●.rb)に学習や確認のために一時的に使用するもの。  -returnとは-  returnは実際にウェブ上に表示させるためのコードで、  returnを記述しないとputsと同じで処理結果をウェブ上に表示できない ■「Rubyの場合、最後の行の「return 値」と「値」とだけ書くのは、全く同じ意味です(が、それはputs云々の話とは全く無関係です)。」  「return 値」:return total_price の部分のことで、ウェブ上に表示される処理結果のこと  「値」:puts menu1.get_total_price(3) の部分ことで、コンソール上にだけ表示される処理結果のこと ■ご提示のコードでもクラス内から結果を取れているのが「返り値」の機能で、putsは「得られた返り値」を表示しているだけです。  「クラス内から結果を取れているのが「返り値」の機能」:return total_price の部分のことで、ウェブ上に表示される処理結果のこと  「putsは「得られた返り値」を表示しているだけ」:ここがわからず、putsなのになぜ返り値を得られるのでしょうか?
maisumakun

2024/10/08 05:43

回答を豪快に書き換えてしまい、失礼いたしました。 >  「return 値」:return total_price の部分のことで、ウェブ上に表示される処理結果のこと  「値」:puts menu1.get_total_price(3) の部分ことで、コンソール上にだけ表示される処理結果のこと そうではありません。「return total_price」を「total_price」とだけ書いても動作は同じ、というだけの意味です。 > putsなのになぜ返り値を得られるのでしょうか? 「式が書いてあればそれを評価して値としていく」というのが、putsとは「関係ない」Rubyの動作です。「puts 式」だったので、式の評価→それを与えてputs、と進んでいきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問