実現したいこと
戻り値や戻り値として返すの意味がわからないため理解したい。
発生している問題・分からないこと
①戻り値とはなんのどこにある値がどこに戻るのでしょうか?
②ソースコードの return total_price はなんのためのコードでしょうか。
また、total_priceはどこに戻るのでしょうか。
total_price の結果はtotal_price -= 100で出てるのになぜ
return total_priceが必要なのでしょうか
③return total_priceがあってもなくても同じ結果になるのは何故でしょうか
該当のソースコード
class Menu attr_accessor :name attr_accessor :price 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 menu1 = Menu.new menu1.name = "ピザ" menu1.price = 800 puts menu1.get_total_price(3)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
以下見ましたがわからずでした
https://terakoya.sejuku.net/question/detail/22397
補足
特になし
Ruby, Ruby on Railsに限りませんが、teratailでも過去、戻り値/返り値に関して同じような質問が何度もされています。"初心の方あるある"なのかもしれませんね。
[戻り値や返り値について] https://teratail.com/questions/43067
「キーワードで検索」欄で「戻り値」で検索して過去の質問回答を覗いてみることもお勧めします。
すでに付いている回答にもありますが、これって、rubyのメソッドは「returnが呼び出されなかった場合は、 body の最後の式の値を返す」という仕様が混乱を招いていると思います。 これが理解できれば解決するのでは?
戻り値というのは出力結果と同じ意味ですよね?
puts とreturn の違いがまずわからないです涙
「returnが呼び出されなかった場合は、 body の最後の式の値を返す」ですが
returnが呼び出されなかった場合という意味がまずわからないです、、、、
returnを呼び出すがわからないです、、
どこに呼び出すのかそもそも元のポジションがどこにあるのかがよくわからないです。
なんのためにreturnがあるのかもわからないです。
returnの話でなぜbody が出てくるのかもわからないです涙涙涙涙涙涙涙涙
どの記事見てもわからないです。
もしかして質問者さんは記事だけ読んで、プログラムを実際には動かしていない状態でしょうか? そうであればご自身で実際にコードを書いて実際に動かして失敗なり成功なり体感すると理解が違うと思うのですが。コードである式や文が実行されてはじめてデータが入出力されるというイメージが付いていないのではないかな、と。
実際にコードを打ち込んでいます。結果が同じになるので何がなんだかわかりません。
できればごちゃごちゃしたくないので、質問に対しての回答以外はお控えいただけますと幸いです。
> できればごちゃごちゃしたくないので、質問に対しての回答以外はお控えいただけますと幸いです。
承知しました。失礼いたしました。
Rubyでは、全てのメソッドは必ず戻り値を返す (逆に言うと、戻り値を返さないメソッドは存在しない)ということが他のページに書かれていました。間違えてすいません。。どういう場合か知りたかったので、copilotにまかせました
def example_method(arg1, arg2)
end
a = example_method(5, 3)
# 出力: nil
def example_method(arg1, arg2)
return nil
end
a = example_method(5, 3)
# 出力: nil
def example_method(arg1, arg2)
return
end
a = example_method(5, 3)
# 出力: nil
まだあるかも…
cでRubyについては、知りませんが、関数中に return が途中にあるときはそれ以上関数をすすめたくないときとかですよね。話は変りますがint Function(a,b){ return5; }を使うと、if (Function(2,5)==5)などになるんじゃなかった?。もしここで、return文 をつかわないとint Function(2,5) int a=2, int b=5などは関数中で寿命がなくなってしまいますよね。ポインタを引数に 使えば大丈夫ですが。Rubyでは、全てのメソッドは必ず戻り値を返す (逆に言うと、戻り値を返さないメソッドは存在しない)ということが他のページに書かれていた。
Rubyここがわかりやすかったです。https://pikawaka.com/ruby/return-value
returnを省略したらどうなるかとかがcと違います。
#メソッド定義
def calc_double(num)
p '倍返しだ'
num * 2 #最後に記述される式の値が返り値になる
end
#呼び出し元
calc_double(4)
"倍返しだ"
=> 8 とか。他にも。
で、提示されていた参考文献では三角形の面積が一番簡単だと思った。
//三角形の面積を計算する関数
function triangle(x,y){
//演算結果を返却する
return x*y/2
}
let triangle_area=triangle(10,20)
triangle(10,20)は返り値で100で、triangle_areaは100になるから。思いつきletはひとつでも、ふたつでも同じ気がしましました。copilotだとletの使われかたは主に、ーと違うことが出てくる気がしたので。
以下バッシュ
a=1+5
echo $a
1+5と表示
let a=1+5
echo $a
6と表示されます
と書いたんですがbashではこうなるのですがRubyでは違うことを調べてみてわかりました。まったくわからないことしかわからなかったのですいません。
ありがとうございます!!!
すみません、一度に理解するとパンクしそうなのでまず以下から質問させてください。
>Rubyでは、全てのメソッドは必ず戻り値を返す (逆に言うと、戻り値を返さないメソッドは存在しない)とい>うことが他のページに書かれていました。間違えてすいません。値かえさないときはreturn nilだそうです。
全てのメソッドは必ず戻り値を返す
それ以外はreturnかnilとのことですが、
returnは戻り値を返すメソッドで
nilも結局nilという戻り値を返しているように見えて
結局どれも戻り値に見えてしまいます。
引用 はい、Rubyの nil は他のプログラミング言語でいう null に相当します。nil は「何もない」状態を表す特別なオブジェクトで、変数が値を持たないことを示します。
#define NULL 0という構文がcにもある
NULLは0だろうけど、(Rubyのnilが0かはしらない。)
ポインタで、使うと何もささないという感じで、なんか見た。)
古めの質問にコメントも何ですが、通知がよく来ているので。
> 値かえさないときはreturn nilだそうです。
この認識だと間違えています。その関数の仕様として「返す値が無い」とか「値を返す必要がない」などの場合でもrubyの関数は値を返さなければならないので、nilを返しておけばいいですよということです。本来は使わないのであれば何を返してもいいのですし、nilとすることを強制されてもいません。そうしておきましょうということです。
ただし、逆は真ではありません。関数がnilを返すからといって、値を返さない関数であるとか、返す値に意味が無いということではありません。 nilも立派な値です。
ruby言語の仕様は、lispも参考にされたとのことですので、nilもそこから来ているのでしょう。
lispのnilは「空リスト」および「偽」を表わします。これらはlispでは同一のものですが、表現としてnilと書くときには「偽」として扱われることが多いです。
rubyも同様で、関数が真偽値(Bool値)を返す場合、nilは偽を表わします。
参考: https://www.rubyguides.com/2018/01/ruby-nil/
一応書いたもののどう扱うか迷ってました。助かりました。