4月20日〜6月末(76期)までテックキャンプ エンジニア転職コースを受講し、現在IT企業へ転職活動中のまさひで(@john01tgmck)です。
テックキャンプ 在学中の一番最初の試験(中間試験)で悩みに悩んだ『引数』を解説していきます。
この記事を読む事で「引数」が理解でき、中間試験や本試験が余裕になるはずです!
コードを交えながら解説していくので、実際に手を動かしてみて、試行錯誤してみてください。
目次
引数とは
まず初めに引数とは「関数」を使用する時に渡す「値」です。
例えば、電卓に『1 + 1』と入力すると『2』という値が返ってきます。
この時プログラミング内ではどのようになっているかというとユーザーの入力値を『引数』として受け取り、処理する関数に値を渡し、計算した値をユーザーに返すという動作を行っています。
図で説明するとこのようになります。
コードで説明
1という引数をcallという関数に渡して計算した値を返り値として表示します。
下記のコードを実行すると『2』という値が返ってくるのがわかります。
def call(num1, num2)
ans = num1 + num2
puts ans
end
call(1,1)
続いて、文字列でもやってみます。
takashiという引数をhelloという関数に渡し、結合した文字列を返しています。
下記のコードを実行すると『こんにちは、takashiさん』と出力されたと思います。
def hello(name)
puts "こんにちは、#{name}さん"
end
hello("takashi")
仮引数と実引数
引数には2種類あり、実際の値を入力する引数を『実引数』、仮の値を『仮引数』と呼びます。
先ほどの例でいうと、1という値が実引数、num1が仮引数となります。
プログラミングでは同じ記述を何度も書くのは効率が悪く、管理も大変という事で関数としてまとめてしまいます。
コードを日本語に直す
プログラミングをしていてわからない!と思ったら、コードを日本語に直すことをオススメします。
なぜかというと、1文づつコードを読んでいくことで理解が深まり、応用が利くようになるからです。
# ユーザー情報を出力する関数(名前、年齢、身長、体重)
def user_info(name, age, height, weight)
# 名前を出力
puts "名前:#{name}"
# 年齢を出力
puts "年齢:#{age}才"
# 身長を出力
puts "身長:#{height}cm"
# 体重を出力
puts "体重:#{weight}kg"
end
# ユーザー情報を入力
user_info("まさひで", 32, 175, 65)
# user_info関数を呼び出し、実引数を渡す事で何人でも出力できる
user_info("たかし", 25, 160, 60)
user_info("としや", 41, 171, 62)
引数を使うメリット
- 関数内の情報を毎回入力する手間が省けます
- BMIも出力したい!などの設定変更があった場合に関数内の処理を修正するだけで終わります。
- コードが短くなり、見やすい
複雑になってきたら都度出力してみる
例にあげた関数は条件分岐も繰り返し処理も何も無いシンプルな関数です。
しかし、学習を進めていくと「あれ?この引数はどこで呼んでいるんだっけ?」「条件分岐先の関数処理でエラー」など頭の中がごちゃごちゃしてくると思います。
テックキャンプ 本試験時に呼び出す関数がわからなくなり、制限時間ギリギリまで解いていたのはいい思い出です。
そんな時はどんな引数が渡されているのか出力してみるとわかりやすくなります。
検索方法
BMIを計算しようと思って関数を作ってみたが、なぜか出力結果が『0』
そんな時は関数内で出力処理を追加します。
def user_info(name, age, height, weight)
bmi = weight / height / height
puts "身長:#{height} 体重:#{weight}"
puts "名前:#{name}"
puts "年齢:#{age}才"
puts "あなたのBMIは:#{sprintf("%.2f", bmi)}です"
end
user_info("まさひで", 32, 65, 1.75)
【出力結果】
身長:65 体重:1.75
名前:まさひで
年齢:32才
あなたのBMIは:0.00です
上記の処理を追加することにより、体重と身長の値を逆に渡していた事がわかります。
上から順番に書く
引数の勉強をしている方ならわかっている話と思いますが、関数を市場上に書いている理由はコードは上から読まれるからです。
仮に関数が呼び出すコードより下に書かれていたら、読み込む事ができずエラーを吐き出します。
たくさんの関数を書くようになると、その順番も意識してみてください。
とはいえ、「わかりにくい!」「整理できない!」そんな時はプリントアウトがオススメです。
僕はテックキャンプ本試験前の勉強として、模試の1〜3をプリントアウトして、コードに蛍光ペンで値や関数の処理順を追っていました。
頭の中で考えていることを一度紙に書き出すことはとても良いインプットに繋がります。
まとめ
- 引数とは関数に値を渡す時に使う
- 実引数は出力したい値のこと
- 仮引数は値をいれる箱を作ること(数学でいうx、y)
以上で引数の解説は終わります。
僕がRuby初めて最初の壁が引数でした。
同じように悩んでいる方の参考になれば幸いです。