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)のようにカンマ(,)で区切ることで複数の引数を取ることもできます。この場合も、呼び出し側と定義側の両方の引数の数が一致する必要があります。