Ruby入門 - メソッド
目次
メソッド(def)
文法
def method_name [([arg[=default]]...[, *rest_args][, &block_arg])] expression... [rescue [error_type, ...] [=> evar] [then] expression...]... [else expression...]... [ensure expression...] end
def はメソッドを定義します。
Ruby
def hello # helloメソッドを定義する puts "Hello!!" end hello # helloメソッドを呼び出す
(...) で引数を受け取ることができます。
Ruby
def hello(name) puts "Hello " + name end puts hello("Tanaka") #=> Hello Tanaka
下記の様に、引数を省略した場合のデフォルト値を指定することができます。
Ruby
def hello(name = "Tanaka") puts "Hello " + name end puts hello #=> Hello Tanaka
メソッドの戻り値(return)
文法
return [expr]
return は、メソッドの戻り値を指定します。下記の例は、引数 x と y の合計値を返すメソッドを定義します。
Ruby
def add(x, y) return x + y end
メソッドの中の一番最後の式がメソッドの戻り値となるため、上記は下記の様にも記述できます。
Ruby
def add(x, y) x + y end
可変引数(*args)
引数の前に * をつけると、残りの引数をすべて 可変引数 の配列として受け取ります。
Ruby
def func(num, *args) p num #=> 123 p args #=> ["A", "B", "C"] end func(123, "A", "B", "C")
メソッドにブロックを渡す(&block)
引数に & をつけると、ブロックを受け取ります。元々は繰り返し処理のために実装されたため、ブロックはイテレータとも呼ばれます。
Ruby
def hello(cnt, &block_arg) cnt.times do block_arg.call end end hello(3) { print "Hello " } #=> Hello Hello Hello
特異メソッド
作成済みのオブジェクトに対して、一時的なメソッド(特異メソッド)を追加することが可能です。自分自身のオブジェクトは self で参照できます。ただし、Fixednum、Symbol、true, false, nil に対しては特異メソッドを定義できません。
Ruby
str = String.new("ABC"); def str.print # strオブジェクトに特異メソッドを定義 puts "[[[" + self + "]]]" end str.print # 特異メソッドを呼び出す
Copyright(C) 2014 杜甫々
初版:2014年12月30日、最終更新:2014年12月30日
https://www.tohoho-web.com/ruby/syntax.html