うぇぶろぐ

ずっと貧乏暇なし

「初めてのRuby」を読んだ(7章)

第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 で呼び出すことができる