記事情報殿堂入り

[Ruby] ブロックやProcの使いどころを理解する

[Ruby] ブロックやProcの使いどころを理解する

(2015/10/13追記) 今なら、他言語には無名関数やcallback関数というものがありますねとか、イベント駆動の世界を覗いてから戻ってくるとより腑に落ちるかもしれませんとか、もう少し全体観の中で説明する気がしますが、当時は本記事の様な理解が役に立ったことは事実なので、引き続き公開を続けます。(2013/11/29追記) block_given? につ...

更新日: 2016-04-06
記事の見出し
  • [Ruby] ブロックやProcの使いどころを理解する
  • 概要
  • 流れ
  • ブロックとは何か
  • do~end(もしくは{~})で囲われた、引数となるためのカタマリ。
  • ブロックの性質
  • 「そもそもブロックとは引数であること」を明示した書き方も存在する
  • &blockの「&」って?
  • Procオブジェクトって?
  • ちなみに、ブロック引数は、仮引数の中で一番最後に定義されていなければならない
  • 以上を踏まえると
  • 呼び出し箇所をblock.callなんて明示せずに、yieldで統一しちゃえば良いじゃん」
  • さらに
  • 「ブロックは全部yieldが示すんだから、仮引数(&block)もいらなくね?」
  • Proc補足
  • Procオブジェクトの定義と呼び出しサンプル
  • 呼び出される(callされる)際に引数が渡されることを期待する書き方サンプル
  • Proc.newとlambdaはほぼ同義
  • で、ブロックやProcって何が嬉しいの?
  • メソッドを後々の利用時に柔軟に拡張出来る
  • 状態を持った関数(クロージャ)としての機能が得られる
  • (2013/11/29追記) Kernel.#block_given? について
  • block_given?とは
  • 利用例
  • block_given?を整理していて気になった事
  • 細かいけど
  • 本来 Kernel.#block_given? は必須の実装なのか?
  • (yieldという特殊な存在に引き摺られて)後付けで実装された
  • 想定外の(もっと言うと本来不要な)柔軟性を生み出している
  • ブロック/Proc参考&御礼
  • 以下に続く
テックブログ情報
[Ruby] ブロックやProcの使いどころを理解する
ブログAkatsuki Hackers Lab
ブログ概要Akatsuki Hackers Labは株式会社アカツキが運営しています。
QiitaQiita::aktsk
会社名株式会社アカツキ
会社概要