Ruby入門 - メソッド

トップ > Ruby入門 > メソッド

メソッド(def)

文法
def method_name [([arg[=default]]...[, *rest_args][, &block_arg])]
  expression...
[rescue [error_type, ...] [=> evar] [then]
  expression...]...
[else
  expression...]...
[ensure
  expression...]
end

def はメソッドを定義します。

def hello           # helloメソッドを定義する
  puts "Hello!!"
end

hello               # helloメソッドを呼び出す

(...) で引数を受け取ることができます。

def hello(name)
  puts "Hello " + name
end

puts hello("Tanaka")    #=> Hello Tanaka

下記の様に、引数を省略した場合のデフォルト値を指定することができます。

def hello(name = "Tanaka")
  puts "Hello " + name
end

puts hello              #=> Hello Tanaka

メソッドの戻り値(return)

文法
return [expr]

return は、メソッドの戻り値を指定します。下記の例は、引数 x と y の合計値を返すメソッドを定義します。

def add(x, y)
  return x + y
end

メソッドの中の一番最後の式がメソッドの戻り値となるため、上記は下記の様にも記述できます。

def add(x, y)
  x + y
end

可変引数(*args)

引数の前に * をつけると、残りの引数をすべて 可変引数 の配列として受け取ります。

def func(num, *args)
  p num                #=> 123
  p args               #=> ["A", "B", "C"]
end

func(123, "A", "B", "C")

メソッドにブロックを渡す(&block)

引数に & をつけると、ブロックを受け取ります。元々は繰り返し処理のために実装されたため、ブロックはイテレータとも呼ばれます。

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 に対しては特異メソッドを定義できません。

str = String.new("ABC");

def str.print                     # strオブジェクトに特異メソッドを定義
  puts "[[[" + self + "]]]"
end

str.print                         # 特異メソッドを呼び出す

Copyright(C) 2014 杜甫々
初版:2014年12月30日、最終更新:2014年12月30日
http://www.tohoho-web.com/ruby/syntax.html