5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby 引数の渡し方

Posted at

Ruby 引数の渡し方

用語

  • 仮引数(parameter)
    メソッド定義の時に使用される引数。
def hoge(x, y); end

x, yが仮引数

  • 実引数(argument)
    メソッド使用時に引き渡す引数。
hoge(1, 'arg')

1, argが実引数。

基本

実引数と仮引数は前から順番に結び付けられていく。それぞれ数が一致していないとエラーになる。

> def basic(arg1, arg2)
>   p arg1
>   p arg2
> end

# 実引数と仮引数の数が一致
> basic('1', '2')
"1"
"2"

# 実引数が足りないとエラー
> basic('1')
ArgumentError: wrong number of arguments (1 for 2)

# 実引数が多すぎるとエラー
> basic('1', '2', '3')
ArgumentError: wrong number of arguments (3 for 2)

デフォルト値

引数にはデフォルト値をセットすることができる。デフォルト値のついていない引数については基本の場合と同様に、前から順番に実引数と仮引数が結び付けられていく。
実引数の数が仮引数より足りないとき、残りの仮引数に対してデフォルト値がセットされていればその値が使われる。
デフォルト値のない仮引数に対応する実引数がなかった場合は基本の場合と同様にエラーが発生する。

> def default(arg1, arg2, arg3='default')
>   p arg1
>   p arg2
>   p arg3
> end

# 実引数の数と仮引数の数が一致
> default('1', '2', '3')
"1"
"2"
"3"

# 実引数の数が足りないときは、デフォルト値が使われる
> default('1', '2')
"1"
"2"
"default"

# デフォルト値の無い仮引数に実引数が与えられないときはエラー
> default('1')
ArgumentError: wrong number of arguments (1 for 2..3)

最後の例からわかるように、defaultメソッドは2から3個の引数を受けるメソッドになる。

キーワード引数

メソッドが必要とする引数の数が増えてくると、使用側でその順番を間違えてしまうこともある。なので、順番ではなく名前で実引数と仮引数の対応をつけることができる。

> def keyword(arg1:, arg2:)
>   p arg1
>   p arg2
> end

# キーワードつきで呼び出し
> keyword(arg1: '1', arg2: '2')
"1"
"2"

# 順番

# 実引数の数が足りない
> keyword(arg1: 1)
ArgumentError: missing keyword: arg2

# キーワードなしだと、解決できない
> keyword(1, 2)
ArgumentError: wrong number of arguments (2 for 0)

デフォルト値つきキーワード引数

キーワード引数にもデフォルト値をつけることができる。

> def keyword_and_default(arg1: 'default1', arg2: 'default2')
>   p arg1
>   p arg2
> end

# ↑2つの挙動がミックスされる
> keyword_and_default(arg1: '1')
"1"
"default"
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?