ブロックとは?(抜粋)
“ブロックはメソッドの引数として渡すことができる処理のかたまりです。ブロック内で記述した処理は必要に応じてメソッドから呼び出されます。”
“Rubyでは「要件を問わず共通する処理」はメソッド自身に、「要件によって異なる処理」はブロックにそれぞれ分担させて、1つの処理を完了させるメソッドが数多く用意されています。”
処理のかたまりとは何か
例えば配列がから要素を受け取って、それを総計にして返すといったような複雑な処理
numbers = [1,2,3,4,5]
sum = 0
numbers.each do |n|
sum += n
end
puts sum # 15が出力
doからendまでが処理の塊
また以下のようにも書ける
numbers = [1,2,3,4,5]
sum = 0
numbers.each{|n|
sum += n
}
puts sum # 15が出力
要件を問わない処理、要件によって異なる処理ということはどういうことか
上の例で言えば、配列をすべ取り出す同じ処理がeachメソッドで行われる。これはハッシュでも同じだが、どんなものが来ても要素を一つずつ最後まで渡すという処理は変わらない。
逆にブロックの要素は例えば奇数だけ合計するといった処理にも変更できる。
numbers = [1, 2, 3, 4, 5]
sum = 0
numbers.each do |n|
if n.odd? # 奇数の場合のみ
sum += n
end
end
puts sum
# 9が出力
参考文献
抜粋
Software Design plusシリーズ プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで
伊藤 淳一