6-3-3 特殊な引数の定義とメソッドを呼び出す方法を確認しよう

引数のデフォルト値を代入する場合

メソッドの定義時に、引数のデフォルト値を代入する場合は、def メソッド名(引数 = デフォルト値)の形式で記述します。

メソッドの呼び出し側では、引数を省略することができます。引数を省略した場合、デフォルト値がメソッド内では使われます。

引数を省略せずに指定した場合は、デフォルト値ではなく、呼び出し元で指定した引数が変数に代入されます。

# メソッド定義
def sample(arg = 1)
  p arg
end

# メソッド呼び出し
sample # 実行結果: 1
sample(2) # 実行結果: 2

引数のデフォルト値をハッシュ形式(キーワード引数)で代入する場合

メソッドの定義時に、引数のデフォルト値をハッシュ形式で代入する場合は、def メソッド名(引数: デフォルト値)の形式で記述します。

メソッドの呼び出し側では、引数を省略することができます。

通常の代入方法と違うのは、メソッドの呼び出し側で、メソッドで定義した時と同様の形式で引数と値をハッシュのような形式で指定する必要がある点です。

つまり、メソッド名(引数: 値)のように呼び出し側も記述します。

このように記述することで、メソッドの呼び出し側を見れば引数名が記述されているので、どんな値を指定しているのかが分かるようになります。

このような引数の指定方法をキーワード引数と呼びます。

# メソッド定義
def sample(arg: 1)
  p arg
end

# メソッド呼び出し
sample # 実行結果:  1
sample(arg: 2) # 実行結果:  2

引数を全て一括で配列として変数に代入する場合

メソッドの定義時に、引数を全て一括で配列として変数に代入する場合は、def メソッド名(*引数)の形式で記述します。

# メソッド定義
def sample(*args)
  p args
end

# メソッド呼び出し
sample('dog', 'cat') # 実行結果:  ["dog", "cat"]

なお、通常の引数の指定の仕方と混在するdef メソッド名(引数1, 引数2, *引数)のような記述もできます。

この場合はメソッドの呼び出し側で、1番目に指定された値が引数1に、2番目に指定された値が引数2に、それ以降の引数が全て配列として*引数に代入されます。メソッドの呼び出し側では、カンマ区切りでメソッドに引数として渡す値を指定します。

# メソッド定義
def sample(arg1, arg2, *args)
  p arg1
  p arg2
  p args
end

# メソッド呼び出し
sample('dog', 'cat')
# 実行結果
# "dog"
# "cat"
# []

sample('dog', 'cat', 'mouse', 'human')
# 実行結果
# "dog"
# "cat"
# ["mouse", "human"]