LoginSignup
231
208

More than 5 years have passed since last update.

Rubyの引数いろいろ

Posted at

Rubyの引数について色々あるけど知らなかったので調べてみた。

普通の引数

class Hoge
  def self.piyo(msg)
    p msg
  end
end
Hoge.piyo('fuga') #=> 'fuga'

デフォルト引数

引数にデフォルト値をもたせられる。
実行時に引数を渡さなかった場合、デフォルト引数を用いて処理が行われる。

def self.piyo(msg='fuga')
  p msg
end
Hoge.piyo #=> 'huga'
Hoge.piyo('fugafuga') #=> 'fugafuga'

キーワード引数

hashを使った引数宣言もできる。
実行時にkeyを宣言しないとエラるので注意。

def self.piyo(msg: 'fuga')
  p msg
end
Hoge.piyo  # =>'fuga'
Hoge.piyo(msg: 'fugafuga') #=> 'fugafuga'

キーワード引数は複数の引数を使う時に便利。
Hashなので引数の順番を気にせず使える。

def self.piyo(msg: 'hello', name: 'Yamada')
  p "#{msg}, #{name}"
end
Hoge.piyo #=>"hello, Yamada"
Hoge.piyo(msg: 'Hi', name: 'Sato') #=> "Hi, Sato"
Hoge.piyo( name: 'Sato', msg: 'Hi') #=> "Hi, Sato"

ただし、定義していないkeyを使おうとするとエラる。

Hoge.piyo(gender: 'male') 
# => ArgumentError: unknown keyword: gender from (pry):23:in `<main>'

可変長引数&オプション引数

*をつければ引数を複数個設定できる。
これを可変長引数という。
引数は配列として受け取られる。

def self.piyo(*msg)
  p msg
end
Hoge.piyo('fuga') # => ['huga']
Hoge.piyo('huga', 'hugahuga') #=> ['fuga', 'fugafuga']

*を2つつけるとオプション引数になる。
オプション引数はHashとして受け取られる。

def self.piyo(**msg)
  p msg
end
Hoge.piyo(msg: 'fuga') # => {:msg => 'huga'}
Hoge.piyo(msg: 'huga', name: 'hugahuga') 
#=> { :msg => 'fuga', :name => 'fugafuga' }

ブロック引数

blockも引数として渡せる。
block.callでメソッド内で実行する。

def self.piyo(&block)
  block.call
end
Hoge.piyo{ p 'fuga' } # => 'fuga'

yieldの方がよく使う気がする。
使い方&結果は一個上と同じ。

def self.piyo
  yield
end
231
208
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
231
208