Kawaii Lab

プログラミングとかサービス開発とか

Rubyの謎、Blockに迫ってみた

Block とは

Blockの定義は以下になります。

  • 複数のコードで構成される
  • Blockに名称をつけることができる
  • 複数のコードは中括弧({})で囲まれる
  • Blockは同じ名前の関数から呼び出すことができる
  • 関数からはyieldで呼び出すことができる

実際に動かしてみた

def  walk
    p "前に移動した"
    yield

    p "左に移動した"
    yield
end

walk { p "行き止まり!" }

実行結果

ruby Ruby/methods.rb

"前に移動した"
"行き止まり!"
"左に移動した"
"行き止まり!"

なぜこんなものがあるのか

単一責任のメソッドを実行する場合に用いるもののようです。
JavaScriptでいうと以下のような時でしょうか

$( "#id" ).click(function() {
  alert( ``called!`` );
});

idがクリックされた時に、アラートをだすという振る舞いを持っています。

def  click
   yield
end
click { p "called!" }

書き換えるとこんな感じでしょうか。
うーむ、あまり使うケースが想定できませんね。
ブロックを使うことによってメモリなどに変化があるのか調べてみたいと思います。