🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Q&A

解決済

2回答

544閲覧

戻り値の有無について

runban

総合スコア152

Ruby

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

0グッド

0クリップ

投稿2021/02/05 10:22

Rubyの戻り値についてお聞きしたいことがございます。
下記コードの7行目(空欄は含まず)にて「relust」と記述しているですが、9行目のosturiメソッドの10行目と11行目の間に同じく「otsuri」との記述が必要ないのは、なぜなのでしょうか。(どちらも計算をしているのに、同じような記述ではないことに疑問に感じております)
また、なぜ7行目ではresultを書く必要があるのでしょうか。
ご教示のほど、何卒よろしくお願いいたします。

ruby

1#割り勘の金額と余る金額を計算するプログラム 2class WarikanCalculator 3 attr_accessor :price, :count 4 5 def warikan_price 6 result = @price / @count 7 result += 1 unless price % count == 0 8 result 9 end 10 11 def otsuri 12 warikan_price * @count - @price 13 end 14 15 def to_h 16 { warikan_price: warikan_price, otsuri: otsuri} 17 end 18end 19 20calculator = WarikanCalculator.new 21calculator.price = 5000 22calculator.count = 3 23p calculator.to_h

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

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

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

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

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

m.ts10806

2021/02/05 10:44

出典は何でしょうか。
m.ts10806

2021/02/05 10:44

>なぜ7行目ではresultを書く必要があるのでしょうか。 「書かなかったらどうなるか」は試したら分かるのでは
guest

回答2

0

ベストアンサー

ruby の method は最後の式の結果を返します。
def otsuri の場合は、最後の式 warikan_price * @count - @priceがお釣りなのでそのままで良いです。

def warikan_price の3行目 result がもし無いと、最後の式は
result += 1 unless price % count == 0 になります。
この計算結果は price % count == 0 でない場合は 期待の答えとなりますが、である場合は nil になってしまいます。
ですので、その場合に備えて result を最後の式にしています。
if price % count == 0 @price / @count else @price / @count + 1 end
とか
@price / @count + ( price % count == 0 ? 0 : 1 )
とか
(@price / @count.to_f).ceil
とかなら、計算しっぱなしでよいです

投稿2021/02/05 10:54

winterboum

総合スコア23567

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

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

runban

2021/02/05 11:00

分かりやすい解説で、なぜresultしないといけないかを理解することができました! ご回答頂きありがとうございますm(_ _)m
guest

0

1つ目のは、resultの値を返したいので、resultと書いてます。
その前の行の値は、unless条件が偽ならresultの値になりますが、条件が真ならnilなので、この行が最後の行だと、「resultの値を返したい」を満たせません。

話が逸れますが、わかりやすく書くと、

Ruby

1 def warikan_price 2 if price % count == 0 3 @price / @count 4 else 5 @price / @count + 1 6 end 7 end 8あるいは、 9 def warikan_price 10 (@price + @count - 1) / @count 11 end

でしょうか。インスタンス変数直接参照と、アクセッサー経由の混在の意味が分からないですが、そのままにしてあります。

2つ目のは、その式の計算結果を返したいので、式を書いています。

3つ目のは、そこに書いてあるハッシュ値を返したいので、ハッシュを書いています。

投稿2021/02/05 11:03

otn

総合スコア85893

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問