プロを目指す人のためのRuby入門・第10章重要ポイントまとめ
「プロを目指す人のためのRuby入門」の第10章を読み終わりました
個人的に重要と判断したポイントをまとめます。
yieldについて
yieldはブロックに引数を渡したり、ブロックの戻り値を受け取ることができます。
def greeting puts 'おはよう' #ブロックの意味を確認してからyieldを呼び出す if block_given? text = yield 'こんにちは' puts text end puts 'こんばんは' end #ブロックをつけてメソッドを呼び出す greeting do |text| text * 2 end #=> おはよう # こんにちはこんにちは # こんばんは
Procクラス
Procクラスはブロック(何らかの処理のかたまり)をオブジェクト化するためのクラスです。
Procオブジェクトを作成するには、Proc.newもしくはKernelモジュールのprocメソッドが使えます。
callメソッドでProcメソッドを実行できます。
#Proc.newで"Hello!"という文字列を返すProcオブジェクトを作成する hello_proc = Proc.new do 'Hello!' end #callメソッドを呼び出してProcオブジェクトを実行する hello_proc.call #=> "Hello!" #Kernelモジュールのprocメソッドを使ってProcオブジェクトを作成する add_proc = proc { |a, b| a + b } #callメソッドでProcオブジェクトの実行 add_proc.call(2, 3) #=> 5
ブロックに対するProcオブジェクトの優位性
・Procオブジェクトはオブジェクトとして扱うことができる(ブロックはただの処理のかたまり)
def greeting(&block) #オブジェクトとして扱えるため、メソッドの呼び出しと変数への代入が可能 text = block.call('こんにちは') puts text end greeting do |text| text * 2 end #=> "こんにちはこんにちは"
・メソッドの引数としてProcオブジェクトを渡せる数に制限がない(ブロックは1つのメソッドに1つだけ)
#メソッドの引数として3種類のProcオブジェクトを渡す def greeting(proc_1, proc_2, proc_3) puts proc_1.call('おはよう') puts proc_2.call('こんにちは') puts proc_3.call('こんばんは') end #Procオブジェクトを用意する shuffle_proc = Proc.new { |text| text.chars.shuffle.join } repeat_proc = Proc.new { |text| text * 2 } question_proc = Proc.new { |text| "#{text}?" } #Procオブジェクトを渡し、メソッドを実行する greeting(shuffle_proc, repeat_proc, question_proc) #=> ようはお # こんにちはこんにちは # こんばんは?
感想
処理のかたまりがオブジェクトととして扱えるという考え方に早く慣れたいと思います!
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る