アプリ版:「スタンプのみでお礼する」機能のリリースについて

Rubyの超初心者です。「戻り値 return」を使う意味が全く分かりません。。「return」の代わりに「puts」ではなぜダメですか?

いい例がすぐに思い浮かばないので、例としてパーセンテージのです。

def percentage(a, b)
if b == 0
  return 0
 end
a * 100 / b
end

A 回答 (3件)

要するに質問者さんは


いちいちreturnで返さずに
そのままそこで表示しちゃえばいいのにって言いたいんですよね?

これに関しては
例に出しているような
それで完結するシステムなのであればいいのですが
そうじゃない場合が殆どです

質問者さんが挙げた例だと確かに恩恵が分かりにくいですが
returnというのは処理の終わりを表しているものと考えて
明示的にここで終わってますよと示すためにも必要なものだと
ふんわりと認識していればいいと思います

勉強を進めていくなかで、returnの必要性などもわかってくると思いますよ
    • good
    • 1
この回答へのお礼

いろいろな場合があるんですね‐‐‐‐。
そのうち分かるようになると思って続けていきます。(^^)

返信有難うございます。

お礼日時:2017/06/02 16:39

そもそも、def percentage(a, b)に何の機能を求めるかということです。


あなたが、求めるものが、「a/bのパーセンテージを画面に表示する。」ということなら、
あなたの仰る通りputsを使えば良いことになります。
しかながら、def percentage(a, b)に求めている機能はそれではないのです。
求めている機能は、「a/bのパーセンテージを返す」ことなのです。
これは、sin(x)が、xの正弦をとった結果を返すことが、sin(x )の機能であること同じことです。
xの正弦をとった結果を画面に表示することが機能ではありません。それと同じことです。

a/bのパーセンテージを画面に表示したいのなら、
def percentage(a, b)の結果を呼び出し側でputsすれば良いのです。
従って、def percentage(a, b)では、putsをしてはいけないのです。
だから return 0 で0を返して終了しているのです。
そして、def percentage(a,b) が返す値は、return を使用しない場合は、最後に評価された値(a * 100 / b)
となります。

一般的に言って、もし、six(x)を呼び出したら、勝手にその結果が画面に出力されたら呼び出し側は困りますよね。
その為、何かを計算した結果がほしい場合、そのようなメソッドは計算した結果を画面に表示することはせず、
それの呼び出し側で画面に出力します。
もちろん、画面に出力すること自体が目的なら、それは、そのメソッド内で思う存分画面に出力すれば良い訳ですが。
    • good
    • 1
この回答へのお礼

返信頂き有難うございます。
今している学習サイトで、定義部分でreturnがない状態で進んでいて、途中から、全く同じ内容に見える定義部分で急にreturnが出てきたイメージがあり、すっかり誤解していました。 (個々の例については、 returnの有無の違い等は難しいですが----)

説明頂き有難うございました。

お礼日時:2017/06/02 23:20

意味...意味かぁ


0と表示して終わりというプログラムでしたら
putsを使って0でもいいでしょう

returnというのはその名の通り戻り値
メソッドの実行結果を返すものだと思ってください
例えば計算結果だったりを返すものです

0が返ってきたらエラー文を表示するといった処理を
メソッド呼出元で行ったりするので0を返したりします


意味を聞かれると難しいですが
返り値を元に処理を分けたりする場合にはreturnが必要になってきます
    • good
    • 1
この回答へのお礼

返信頂き有難うございます。
説明頂くとなんとなくわかるような気もするのですが、個々の例で見ると、なぜ「if --- / puts -----/ else/ puts ------/ end」ではなく、「return」なのかわかりません---。以下もその一例です。


商品の合計額が1万円より少ない場合、300円の送料がかかる場合   

def total_cost(price)
if price >= 10000
  return price
end
return price + 300
end

#商品の合計金額 7000円の場合
puts "お支払い金額は、送料込みで#{total_cost(7000)}円です"
#商品の合計金額 16000円の場合
puts "お支払い金額は、送料込みで#{total_cost(16000)}円です"

お礼日時:2017/06/02 13:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!