読者です 読者をやめる 読者になる 読者になる

Bonkura - Kenny

SIerで働く文系SEの記録

【たのしいRuby_7】メソッド

たのしいRubyの第7章を学んだ。

たのしいRuby 第4版

たのしいRuby 第4版

オブジェクトとメソッドの基本

オブジェクト.メソッド名(引数,引数2,…)

  • この構造のオブジェクトは レシーバ とも呼ばれる。
  • メソッドの実行を オブジェクトにメッセージを送る と捉える。
  • オブジェクトはメッセージをレシーブする。

メソッド

インスタンスメソッド

あるオブジェクトがあった時に、そのオブジェクトをレシーバとするメソッド。一般的。

p "10,20,30,40".split(",")

クラスメソッド

レシーバがインスタンスではなくクラスそのものだった場合。例えば、インスタンスを作るような場合

Array.new
File.open("hoge")
p Time::now
# クラスメソッドの呼び出しは 「.」 だけでなく 「::」 を使う事が出来る!

モジュール関数

モジュールの提供するメソッド「モジュール名.メソッド名」

関数的メソッド

レシーバがない(省略されている)メソッド

print "hoge"

演算子メソッドの一部。

obj + arg1
# objがレシーバ、arg1が引数

メソッドの定義

def メソッド名(引数1,引数2)
 実行したい処理
end
def hoge(word="hogehoge")
  puts "hoge?no!#{word}"
end

hoge()
hoge("fuga")

「return 値」

メソッドの戻り値を取得出来る。省略した場合は。 メソッドの中で最後に得られる値 が戻り値となる。

ブロック付きメソッドの定義

「yield」

メソッドの呼び出しの際に与えられたブロックを実行する。下の例で言えばputs〜num列。

def myloop
  while true
    yield 1
  end
end

num=1

# yeildの引数がブロック変数としてブロックに渡される。
myloop do |i|
  puts "num is #{num}"
  break if num > 100
  num *= 2
end

引数の数が決められないメソッド

def foo(*args)
 args
end
p foo(1,2,3) #=> [1,2,3]
# 不定の変数は全てargsという変数に配列として渡される。

キーワード引数

引数名と値のペアで引数を渡せる

def area(x:0.y:0.z:0)
~
end

※定義に存在しないキーワード引数をエラーにせず受け取りたい場合は、「**変数名」の形式で受け取れる。 その際引数の変数には、存在しないキーワードをキーとして持つハッシュオブジェクトが設定される。

引数の渡し方特殊例

「*配列」の形式で引数指定:配列の要素数メソッドの引数が同じれあれば、よしなに引き渡してくれる。