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

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

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

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

Q&A

解決済

2回答

432閲覧

Rubyのメゾット内におけるreturnの必要性について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2018/10/09 04:56

正解のコード

Ruby

1def shipping_free?(price) 2 return price >= 5000 3end 4 5puts shipping_free?(3000) 6 7#=>false

不正解のコード

Ruby

1def shipping_free?(price) 2 price >= 5000 3end 4 5puts shipping_free?(3000) 6 7#=>false

不正解のコードでは、returnがないのに、答えにfalseが返ってきました。
真偽値を返すメゾットでなぜreturnがいるのですか?
また、returnがなくても答えが正しくなった理由も教えて欲しいです。
puts price >= 5000でもfalseが返ってきました。

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

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

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

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

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

guest

回答2

0

どちらも正解です。

自動採点だと、あらかじめ用意した答えと同じかどうかで判断しているのでは?

メソッド(methodのthは濁らない)の値は、最後に実行された式の値です。
if / while / for 等の制御構造の場合の値については、リファレンスを見てください。

投稿2018/10/09 05:12

otn

総合スコア84559

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

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

退会済みユーザー

退会済みユーザー

2018/10/09 07:22

回答ありがとうございます。 メソッドだったんですね。。。今、気づきました。プログラマの友達がいなくてよかったです。
guest

0

ベストアンサー

問題がわからないのでなぜ下の方が不正解になっているのかわかりませんが、
Rubyのメソッドは最後に評価された値がreturnされます。

なので

不正解のコードでは、returnがないのに、答えにfalseが返ってきました。

これはprice >= 5000がfalseなのでfalseが返ったということです。

真偽値を返すメゾットでなぜreturnがいるのですか?

真偽値に限らず値を返すメソッドでは原則returnが必要なのですが、
Rubyでは上の理由からreturnあるなしに関わらず何かしら値がreturnされます。

また、returnがなくても答えが正しくなった理由も教えて欲しいです。

最初の理由のとおりです。

puts price >= 5000でもfalseが返ってきました。

関数の最後をputs price >= 5000としたという意味であれば
falseが返ってきたのではなく、関数内でfalseの表示が行われただけです。
putsはnilを返すので、呼び出し元のputs shipping_free?(3000)の表示は
nilなので何も表示されていないという感じになっています。

投稿2018/10/09 05:11

dice142

総合スコア5158

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

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

退会済みユーザー

退会済みユーザー

2018/10/09 07:26

回答ありがとうございます。 return やputsがないと出力されないと思っていましたが、そうではないのですね。
dice142

2018/10/09 07:30

ん?いえ、putsはないと出力されませんよ? returnはなくても(Rubyの場合は)問題ないですが、出力にはputsなどでの出力は必要です。
退会済みユーザー

退会済みユーザー

2018/10/09 07:41

え、やっぱりputsはないとダメだったんですね。
dice142

2018/10/09 07:42

どこのことを仰ってますか?質問文にはputsが1つもないコードなんてありませんが。
退会済みユーザー

退会済みユーザー

2018/10/09 07:44

この質問というか、ruby全体についてのコメントでした。
dice142

2018/10/09 07:48

私は一度も「putsがなくてもいい」と回答してないのでどこのことだろうと2,3回見直してしまいました。。。 ご提示いただいているコードにも必ずありますが、putsはRubyの標準出力のためのものなので、 これがなければ標準出力されません。 (putsの他にも標準出力のものはprintなどあるので、そちらでも可能です)
退会済みユーザー

退会済みユーザー

2018/10/09 07:55

ご迷惑おかけしてすいません。 printというものもあるんですね。putsとprintは必要で、returnはなくても出力される。ということをおぼておきます
dice142

2018/10/09 08:01

Ruby全般的な話だとすると、出力に関しては「return」は関係ないです。 今回の質問で用いたコードでは「puts メソッド名」としていたのでメソッドの返り値が関連していましたが、 出力と一緒に用いるとは限らないので、切り離して覚えたほうが良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問