質問: ### 前提・実現したいこと Progeteで勉強している初学者です。 def中のif中elseのあとで処理するのと、ifのendのあとで処理するのとで違いはありますか? ググった結果、違いはないけど、if-elseで処理しないほうがいいよ~ ってくらいに感じだたのですが、間違っていないでしょうか? ### 発生している問題・エラーメッセージ ``` def price_with_shipping(price) # priceが5000以上のとき、戻り値としてpriceを返すif文を作成してください if price >= 5000 return price end # priceに500を加えた値を戻り値として返してください return price + 500 end puts "商品の合計金額は3000円です" puts "お支払い金額は、送料込みで#{price_with_shipping(3000)}円です" puts "-----------" puts "商品の合計金額は10000円です" puts "お支払い金額は、送料込みで#{price_with_shipping(10000)}円です" ``` ### 該当のソースコード ``` ソースコード ``` ### 試したこと ruby def の中にif else でググって↓のページに辿り着きました。 https://qiita.com/katoy/items/bd243d62375bc74247b9 if - else を使わなくても可能で、if - else を使った分岐では破綻しやすい。 と記載がありました。 ### 補足情報(FW/ツールのバージョンなど)
回答: ロジック的観点よりも、リーダブルなコード的観点で早めにReturnしてメソッドから抜けよう!ってことがよく言われます(参考)。 例えば今回上げていらっしゃるコードで言うと、 1. elseを書かずにifがTrueの時に、Returnをしてしまえば、早くメソッドから抜けられます。 2. Rubyだと最後の行を返り値として返すのであれば、あえてReturnを書く必要はありません。 3. 後置Ifを使えば1行でIf文を書くことができます。長いコードではないので、ここは1行でいいかもです。 ``` def price_with_shipping(price) # priceが5000以上のとき、戻り値としてpriceを返すif文を作成してください return price if price >= 5000 # priceに500を加えた値を戻り値として返してください price + 500 end ``` また三項演算子を使って以下のように1行で書くこともできます。 ifの中のコードが今回のように短い場合は、コードがスッキリするのでおすすです! ``` def price_with_shipping(price) price >= 5000 ? price : price + 500 end ```