Ruby:引数の基本その1
初心者向け、Rubyでの引数の使い方(その1)
引数の使い方シリーズ、今回はメソッドで引数を使うやり方を解説します。
どういう時にメソッドで引数を使うかというと、メソッドの中と外でデータのやり取りをする時です。
変数にはスコープといって、その変数を使うことができる範囲があります。通常、メソッドの中からは、メソッドの外で定義された変数を使うことができません。逆に、メソッドの中で定義された変数も、メソッドの外から見ることはできません。
fruit = "apple" #メソッドの外 def favorite puts fruit #メソッドの中にあるので、外で定義されたfruitを使えない end favorite #=>メソッドを呼び出すがエラーになる
それでは、メソッドの間で変数のやり取りをしたいときはどうするか?いくつか方法があるのですが、代表的な方法がメソッドに引数を設定する、というものです。
引数というのは、例えばmethod(a)
のaのようにメソッドの後の()の中に書きます。そして、ここが混乱するところなのですが、引数は基本的にメソッドの定義側と呼び出し側の2箇所書く必要があります。詳しくみてみます。
まずメソッドの呼び出し側で、メソッドの中で使いたい変数を引数に指定します。メソッドを呼び出す地点で使える変数でないといけません。そうしたら今度は、メソッドの定義側で同じように引数を()の中に書きます。ここで書く引数は、取ってくる引数と同じ名前でもいいし、別の変数名をつけても構いません。注意点として、呼び出し側と定義側で引数の数が一致している必要があります。呼び出し側で取ってきた変数が、定義側の引数に書いた変数に代入されます。
fruit = "apple" #メソッドの外 def favorite(fruit)#②定義側:呼び出し側で取ってきた変数を()の中に書く。 puts fruit # ③メソッドの中で外で定義した変数が使えるようになる。 end favorite(fruit) #①呼び出し側:メソッドの中で使いたい変数を()の中に書く。 #実行結果=> "apple"
fruit = "apple" #メソッドの外 def favorite(food) #②定義側:メソッドの中で使いたい変数名に変えられる。 puts food # ③変えた変数名で使える。(変える前の変数名だとエラーになる) end favorite(fruit) #=>①呼び出し側:取ってくる変数なので引数の名前は変えられない。 #実行結果=>"apple"
これでメソッドの中で、外で定義された変数を使うことができるようになりました。
複数の変数を使いたいときは、method(a,b)
のようにカンマ(,)で区切ることで複数の引数を取ることもできます。この場合も、呼び出し側と定義側の両方の引数の数が一致する必要があります。