第7章「メソッド」についてまとめていきます。
今回もここに到るまでに、すでに使用していることが多かったので、要点だけ抜粋したいと思います。
前回はこちら
メソッド
手続きをモジュール化し再利用する仕組み
Ruby ではメソッドチェーンで書くことが多い
gets.chomp.split(" ").map(&:to_i)
こんな感じ
レシーバの省略
以下のようにレシーバ self
を省略することができる
※ private メソッドは必ず省略する
同一名のローカル変数が存在すればそちらが優先されるので、明示的に self
を書かなければいけない
class Sample def hoge bar # => レシーバを省略することができる foo # => private メソッドは必ず省略しなければならない end def bar puts "bar" end private def foo puts "foo" end end
組み込み関数
組み込み関数とは、どこからでも呼び出せるメソッドで p
, puts
などが代表的
Kernel モジュールに属しており、Object クラスの中で Kernel モジュールを include しているためどこからでも呼び出すことが可能なのである
メソッドの定義
def
と書くことでメソッドを定義することができる(細かいことは割愛)
ブロック付きメソッド
メソッド呼び出しにはブロックを引数に渡すことができる
ブロックとは {...}
, do...end
のことである
array = [1, 2, 3] array.each do |i| puts i end
ブロック付きメソッドの定義は yield式
を使うことで渡されたブロックを実行することができます
def sample_yield yield end [1, 2, 3].each do |i| sample_yield do puts i end end # => 1 # => 2 # => 3
yield式
でブロックを呼び出そうとするが、ブロックが渡されていない場合エラーが発生する
ブロックが渡されているかどうか確認したい場合は block_given?
を使うと解決する
Proc について
Proc クラスはブロックをオブジェクト化するためのクラス
hoge = Proc.new do puts 123 end hoge = Proc.new { puts 123 }
どちらで作成しても良いが、呼び出すときは hoge.call
で呼び出すことができる