Ruby学習コースⅠ~Ⅲ|メモ|メッソドと引数と戻り値とreturnでの条件分岐

Ruby始めました

JavaScriptjQueryはさっくり目に終わらせて

とうとうRubyコースに入りました。

プログラム感あるよね付いて行けるかな?!

とドキドキならくだ🐫でしたが

JavaScriptをやっていたおかげかそこまで躓くこともなく進めております。

まぁ言っても初歩の初歩だもんね。

🐫頑張る。

ちょっと悩んだreturnでの条件分岐

こうすれば出来るっていうのは分かったけど

なんで出来るのかが良くわからなかったreturnでの条件分岐ですが

メモをノートに纏めていたら突然ストンと納得したので纏めてみます

その前にメソッドと引数と戻り値についてさらっと復習

メソッド

繰り返し同じ処理をするときなどに便利な機能

def(メソッドの実行を宣言して) メソッド名を決めて 内容(処理)を書いて end(閉じる)

呼び出す(実行)

def wallet(walletと言う名前のメソッドを宣言)

#ここから処理の内容

puts “私の財布です” (私の財布です と出力)

  #ここまで処理の内容

end(メソッドの宣言を修了)

wallet(”私の財布です”と出力するように設定されたwalletと言う名前のメソッドを呼び出す)

出力

私の財布です

引数

メソッドを呼び出した時に値を設定して処理に代入(引数展開)できる便利な機能

複数設定することもできる

→複数の引数がある時、値の並びは引数の並びと同じになるが

引数の数が多くなると分かりづらくなるのでキーワードとしてセットする

def wallet(bills: , coins:) (bills とcoinと言う2つの引数をセット)

puts “私の財布です”

puts “紙幣で#{bills}円あります” (引数billsを展開)

puts “硬貨で#{coins}円あります” (引数coinsを展開)

end

wallet(bills: 12000 (引数billsに12000を渡す), coins: 372(引数coinsに372を渡す))

wallet

出力

私の財布です

紙幣で12000円あります (billsに渡された12000が代入されている)

硬貨で372円あります  (coinsに渡された372が代入されている)

戻り値

呼び出し元に値を返す

def wallet(bills: , coins:)

return bills + coins

end

sum = wallet(bills: 12000, coins: 372)

  (walletに12000を渡したdillsと372を渡したcoins足して返す)←これをsumに代入

puts  “私の所持金は#{sum}円です”

出力

私の所持金は12372円です

真偽値を返すreturn

条件式をreturnの値にすると呼び出し元の値の真偽値を返してくる

※真偽値を返すreturnを使う場合にはメソッド名の末尾にを付ける

def  budget?(wallet)

return wallet >= 10000(条件式 walletは10000以上)

end

puts budget?(8000)(呼び出し部分 walletに渡す値は8000)

(条件を満たさない)

出力

falst(条件を満たしていればtrue)

さらさらっとですがこんな理解です。

returnの特性と複数のreturnを組み合わせた条件分岐

returnは戻り値を返すだけではなく

メソッドの処理を終わらせることが出来る為

if文と組み合わせて条件分岐を作ることが出来る

よくわからないので例に沿って考えてみる

def  budget(wallet)

  if wallet >= 10000  (walletが10000以上なら)

   return “買い物して良い” (買い物して良い を返す)

  end

return “我慢しましょう” (我慢しましょう を返す)

end

puts budget(12000)

出力 walletが10000以上なのでreturn”買い物して良い”が実行され処理が終了する

   処理が終了しているためreturn”我慢しましょう”は実行されない

買い物して良い

puts budget(8000)

出力 walletが10000以下なのでreturn”買い物して良い”は返らず処理が続く

     return “我慢しましょう” が実行される

我慢しましょう

初め、何が引っ掛かったのかと言うと

endの後なのに処理が続くの?と言うところ。

ちょっと落ち着いて考えればわかる事なんだけど

return “我慢しましょう”の前についているendはif文(下線部)を閉じるendで

メソッド自体を閉じるendではないんですね。

なぜか、手書きで、メモではなくてノートに清書するまで気づきませんでした。

らくだ🐫はもっと、スコープと言うものを意識した方が良さそうです。

あと、Progateは指示に従ってサクサク進めることが出来ちゃうけど

流してやってたらダメ!ってことですよね。

とは言え拘り過ぎても進まなくなると思うし

たまたま気づけてラッキー✨と思っておりますテヘペロ