引数を付けてメソッドを呼び出す

メソッドでは引数を受け取るように定義することができます。そして引数があるメソッドを呼び出すときにはメソッドに渡す引数を指定して呼び出します。ここでは Ruby で引数をつけてメソッドを呼び出す方法について解説します。

(Last modified: )

引数を付けてメソッドを呼び出す

メソッドを定義するときに引数を受け取るように定義することができます。その場合、メソッド名の後ろに受け取る引数の数だけ変数を記述します。引数が複数ある場合にはカンマで区切って続けて記述して下さい。

def メソッド名(変数1, 変数2, ...)
  実行する処理
  実行する処理
end

引数を受け取るように定義したメソッドを呼び出すときには、メソッドに渡したいオブジェクトを引数として記述して呼び出します。

メソッド名(引数1, 引数2, ...)

引数が複数ある場合にはカンマで区切って続けて記述して下さい。

※メソッドを呼び出す側で指定した引数を「実引数」、メソッド定義側で記述した引数を「仮引数」と呼ぶこともあります。

呼び出し側で指定した引数の数とメソッド定義で指定した変数の数は一致していなければエラーとなります。(ただし引数にデフォルト値などを設定しておく事も可能です。詳細は別のページで確認します)。

具体的には次のように記述します。

def printHello(msg, name)
  puts(msg + "," + name)
end

printHello("Hello", "Yamada")

上記では引数として「Hello」と「Yamada」と言う文字列オブジェクトを2つ指定しています。メソッドでは引数として「msg」と「name」の2つの変数が指定されていますので、「Hello」が変数「msg」に代入され、「Yamada」が変数「name」に代入されます。

オブジェクトが代入された変数はメソッド内でローカル変数として参照することができます。

メソッド定義での変数の扱い

変数にオブジェクトが代入された時、変数にはオブジェクトのコピーが格納されるのではなく、変数は代入されたオブジェクトを指し示すようになるだけでした。メソッドを呼び出す時も同じであり、メソッドに渡されてきたオブジェクトは引数に指定された変数にコピーが格納されるのではなく、変数は引数として渡されてきたオブジェクトを指し示すことになります。

その為、メソッド側でオブジェクトそのものを変更するような処理をすると、呼び出し元のオブジェクトも変更されます。

def addString(str)
  str << ",Japan"
end

address = "Tokyo"
puts(address)

addString(address)
puts(address)

上記ではメソッド内で引数として渡されてきた文字列オブジェクトに別の文字を追加しています。その結果、メソッド呼び出し前と呼び出し後では、変数「address」が指し示している文字列オブジェクトが書き換えられているため、メソッド呼び出しの前と後では別の文字列を出力します。

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

def printHello(msg, name)
  puts(msg + "," + name)
end

printHello("Hello", "Yamada")

下記のように実行して下さい。

引数を付けたメソッド呼び出し

メソッドを呼び出すときに引数を指定して呼び出すことができました。

もう一つ別のプログラムを試してみます。

# encoding: UTF-8

def addString(str)
  str << ",Japan"
end

address = "Tokyo"
puts("呼び出し前:" + address)

addString(address)
puts("呼び出し後:" + address)

下記のように実行して下さい。

引数を付けたメソッド呼び出し

メソッドの中では引数で渡されてきたオブジェクトそのものに変更を加えています。その結果、同じ変数であってもメソッドの呼び出し前と呼び出し後で値が変更されています。

-- --

Ruby で引数をつけてメソッドを呼び出す方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。