40日目:Ruby Ⅲ:関数の集合体メソッドを使いこなそう (メソッド、引数、戻り値、キーワード引数)
<学習日>
40日目
<学習内容>
① Ruby Ⅲ (0-100):関数の集合体メソッドを使いこなそう (メソッド、引数、戻り値、キーワード引数)
<参考>
Progateレベル:171
<学習内容詳細>
今日はRuby3つめの単元を完了させました^^
メソッドについて一通り勉強することが出来ました!
① Ruby Ⅲ (0-100):関数の集合体メソッドを使いこなそう (メソッド、引数、戻り値、キーワード引数)
基本的には詰まる可能性があるのは、「戻り値を使用した場合の値の動き方」と思いますが、もう他の言語で何回も少し複雑なcodeで頭を捻ってきたので、多少表現がことなる言語になっても、特に躓くことなく進めることが出来ました!
ではさっそく、具体的なcodeを見ながら、振り返っていきましょう^^
・メソッドの定義と呼び出し
メソッドとは処理をまとめて実行する関数のようなものである。
実際の定義と呼び出しは以下のとおり。
<定義>
def introduce
puts "こんにちは"
puts "薬膳です"
end
<呼び出し>
introduce
<出力>
こんにちは
薬膳です
呼び出すときは、メソッド名を出すだけでOK。
・引数を使用して、汎用的なメソッドを作成しよう。
引数とはメソッドを実行するときに、外部から個別の値を受け取る枠のようなもの。
具体的なcodeは以下のとおり。
<定義>
def introduce(name, age)
puts "こんにちは、私の名前は#{name}です。#{age}歳です"
end
<呼び出し>
introduce("薬膳"、30)
<出力>
こんにちは、私の名前は薬膳です。30歳です。
このように、複数の引数を設定でき、値を渡すことができる。ただし、呼び出し時には、引数と同じだけの値を指定する必要がある。
例では1人分だけだったが、100人分ともなるとこの方式の方が効率が良いし、WEBサービスを考えると、ユーザー登録時の情報をそのまま引っ張ってくれば、リストの作成が自動化できる。
・戻り値を使って、より汎用的な使い方が出来るようにしよう
戻り値とは、メソッドを呼び出したときに、その呼び出しもとに特定の処理をした後の値を返すことが出来る機能。
具体的な使用例は以下のとおり。
<定義>
def introduce(name)
return name
end
<呼び出し、受け取り、出力>
myname = introduce("薬膳")
puts "私の名前は#{myname}です"
<出力>
私の名前は薬膳です
値を数字や条件式にすると、プログラミングとしての汎用性が上昇するイメージ。今回の例は分かりやすさ重視だったが、数字の例の方がいいかも。
ということで、数字の場合は以下のとおり。
<定義>
def calc(a, b)
return a + b
end
<呼び出し、受け取り、出力>
sum = calc(2, 9)
puts "合計は#{sum}です"
<出力>
合計は9です
このように数字の計算結果を返すことが出来るので、様々なケースにおいて、計算結果によって表示を変えたりという応用が見据えられる。
また、条件式を返すこともできる。この場合はif文と組み合わせて、メソッド呼び出し時の値によって、出力を分けることが出来る。
<定義>
def rideon_ok?(a)
return a >= 120
end
<呼び出し、受け取り、出力>
if rideon_ok?(100)
puts "120cm以上なので乗れます"
else
puts "120cm未満なので乗れません"
end
<出力>
120cm未満なので乗れません
ここで注意したいのは、メソッド名の?の役割で、結論から言うと?はなくてもよい。
true or falseの値を持つメソッドは、慣例的に?を末尾につけるというだけ。
また、returnには「そこで処理終了」という機能があるので、ifと組み合わせることで、メソッド内で条件ごとに戻り値を変化させることが可能である。
(ifでtrueの時の処理内容がreturnだった場合、その条件式がtrueになった時点で、return以下の処理はなされない)
・キーワードで引数を指定する方法がある。
具体的なcodeは以下のとおり。
<定義>
def introduce(name:, age:, height:)
puts "こんにちは、私の名前は#{name}です。#{age}歳の#{height}cmです"
end
<呼び出し>
introduce(name:"薬膳", age:30, height:120)
<出力>
こんにちは、私の名前は薬膳です。30歳の120cmです。
ただ単にめんどくさいだけのように見えるが、汎用性がぐっと増す。
なお、ただの引数と違って、メソッドの呼び出し時に、値を各順番はどうでもよい。キーワードと紐づけして、メソッドに値を入れにいくからである。
例えば、呼び出しは
introcude(age:30, height:120, name:"薬膳")
でも全く同じ出力になる。
ということで、本日の勉強は終わりです。
次回からは、おそらく最後のキーワード引数をWEBアプリで汎用すると、どんな使い方があるのかを勉強できるのかなと予想しております^^
ではでは、1日でも長く続けられるように頑張っていきます^^
同志の方、一緒に頑張っていきましょう!