引数とは
変数にはスコープというものがあり使える範囲が決まっています。
変数は変数を定義したメソッドないでしか使う事ができません。実際のコードで説明していきます。
変数.rb
name = "ゆーいち"
puts name
#=>"ゆーいち"
これはスコープの範囲なので変数を使う事ができます。次を見て見ましょう。
変数.rb
name = "ゆーいち"
def yuichi
puts name
end
yuichi
#エラー
このようにメソッド内で変数nameを使おうとしていますが、nameという変数はメソッドの外で定義しているためメソッド内でnameを認識できずエラーになってしまいます。
これを解決してくれるのが引数です。
引数の定義
引数.rb
def yuichi(name)
puts name
end
name = "ゆーいち"
yuichi(name)
#=>"ゆーいち"
これでスコープの問題を解決できました。
何をしているかというと、yuichiというメソッドを呼び出す際にメソッドに変数nameを渡しています。
引数.rb
name = "ゆーいち"
yuichi(name)
この部分ですね、それを受け取ったメソッドはその値を変数としてメソッド内で使う事ができます。
ここで()内に定義しているものを本引数と言います。
引数.rb
def yuichi(name)
puts name
end
この部分になります。ここで受け取る際の()内に定義したものを仮引数と言います。
また仮引数と本引数は違う名前でも構いません、
例えば、
引数.rb
def yuichi(lastname)
puts lastname
end
name = "ゆーいち"
yuichi(name)
#=>"ゆーいち"
このように書くこともできます。ただし仮引数の名前はメソッド内で使える変数なのでメソッド内でも仮引数の名前を使わなくてはなりません。
引数.rb
def yuichi(lastname)
puts name #nameは使えない
end
name = "ゆーいち"
yuichi(name)
#エラー
こういうのだったり
引数.rb
def yuichi(lastname)
puts lastname
end
name = "ゆーいち"
yuichi(lastname) #変数nameをメソッドの渡せていない
#エラー
こういうのはできないので注意しましょう。
最後に
今回は引数について説明していきました。
変数は特に初学者の方はメソッドの呼び出しや、引数の受け渡し、変数の定義などが重なってごっちゃになってしまいがちだと思います。一つ一つ順をおって確認していく事が大事です。
最後まで読んでいただきありがとうございました。