rubyを書き始めた時から今までblockというアイデアに今一つピンと来ていなかったので今回はblockについて考えてみました。

  • blockとはまず何か?
  • blockがあると、どんな事が便利になりそうか?

を考えてみました。

block とは何か?

10.times do
  #処理
end
(1..10).each{
  #処理
}

mapやeachなどのmethodと一緒に見かけるdo end、中括弧をblockといいます。

(1..5).each do |foo|
  puts foo * 2
end

--------結果
2
4
6
8
10

実際に1から5までの配列の中身を2倍して表示してみます。
ruby初心者から一見するとこの形があまり馴染み深くないように見えます。

ですが、このblockは実はmethodの引数であるという事を教えてもらうと、とたんに馴染み深い形になります。

Object.method 引数

どうでしょうか blockの中でゴチャゴチャと色々な処理が行われているので本来の形が見えづらくなっていますが実は普段のmethodを呼ぶ時と同じ事を行っているのだとわかりました。

とはいえ引数に渡せるものは何らかの値だけという考えがあってblockは全然、引数に見えないというのが正直な感想です。

blockは言わば処理の手続き、メソッドといったり関数といったりして良いでしょう。そんな手続きすらも値であるという思想がrubyにも反映されているのでblockのような処理を実現しています。

blockの事がなんとなくわかってきたところで、じゃあblockのどこが便利なのかという事も気にしてみました。

中身の数字を2倍して表示するという事行いましたが今度は奇数だけ表示するという事を行ってみます。

(1..5).each do |foo|
  p foo if foo.odd?
end

----------結果
1
3
5

といった具合にblockの処理を変えるだけで別の結果を得られます。

eachがもつ配列の中身を一つづつ見ていくというベースの機能をそのままにして、その上でどういう処理をしていくか?という部分を柔軟に決める事がblockの便利な所だと思います。