LoginSignup
0
0

More than 1 year has passed since last update.

引数の種類

Last updated at Posted at 2021-05-13

引数には種類があって、区別できていなかったので基本的なことを整理する。

引数

定義における値の受け渡しの基本

def メソッド名(仮引数) # メソッドの定義
 ...
end

メソッド名(実引数)       # メソッドの呼び出し

仮引数

メソッド定義において、メソッド呼び出しで与えられた実引数を受け取る変数。
スコープはローカル変数と同じで再代入できる。
仮引数に代入を行っても呼び出し側には影響を与えない。

仮引数にデフォルト式が与えられた場合は、実引数の省略時にデフォルト値となる。

def foo(par = 'hoge')  #デフォルト式(=)、値('hoge')
 puts par
end

foo        #実引数を省略した時
#=> "hoge" 
foo(bar)   #実引数を明示した時
#=> "bar"

実引数

メソッド呼び出しにおいてメソッドに与えられる値。
実引数には式を与える
全ての式が評価されてからメソッドが呼び出される。

キーワード引数

キーワードによって特定される引数。
ハッシュ形式で引数を設定できる。
呼び出しは、「シンボル:値」の形式で指定する。
デフォルト値が設定されている場合は実引数を省略できる。
定義時にデフォルト値の指定がなければ実引数を省略するとエラーになる。

def person(name: 'taro', age: '20' )
 puts "#{name}, #{age}"
end

person
#=> "taro, 20"
person(name: 'hana', age:)
#=> "hana, 20"
person(country: 'japan')
#=> ArgumentError (unknown keyword: country)

可変長引数(rest引数)

*仮引数名で、複数の引数を設定できる。
引数は配列として格納される。

def foo(x, *xs)
 puts "#{x}:#{xs.inspect}"  # inspectは、オブジェクトや配列を分かりやすく返すメソッド。
end

foo(1)     #=>1:[]
foo(1,2)   #=>1:[2]
foo(1,2,3) #=>1:[2,3]

オプション引数

**仮引数名で、可変長引数と同じように制限なく引数を設定できる。
キーを引数として渡すことができる。
ハッシュ形式で値を扱う。

def foo(**bar)
 puts bar
end

foo
#=> {}
foo(key1: '1', key2: '2')
#=> {:key=>"1", :key2=> "2" }

ブロック引数

&仮引数名でブロックを引数として受け取ることができる。

def foo(cnt, &block_arg)
 cnt.times { block_arg.call }
end
#.timesは、繰り返し処理を行うメソッド
#.callは、ブロックを呼び出すメソッド

foo(3) { print "Ruby!" }  # {}ブロックの部分
#=> Ruby!Ruby!Ruby!

Ruby 2.3.0 リファレンスマニュアル > クラス/メソッドの定義
プロを目指す人のためのRuby入門/著者:伊藤淳一

0
0
1

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
0
0