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 [expr]
return は、メソッドの戻り値を指定します。下記の例は、引数 x と y の合計値を返すメソッドを定義します。
def add(x, y) return x + y end
メソッドの中の一番最後の式がメソッドの戻り値となるため、上記は下記の様にも記述できます。
def add(x, y) x + y end
引数の前に * をつけると、残りの引数をすべて 可変引数 の配列として受け取ります。
def func(num, *args) p num #=> 123 p args #=> ["A", "B", "C"] end func(123, "A", "B", "C")
引数に & をつけると、ブロックを受け取ります。元々は繰り返し処理のために実装されたため、ブロックはイテレータとも呼ばれます。
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 # 特異メソッドを呼び出す