ブロック引数について整理してみた(Ruby)
ブロック引数について考えていたら混乱してきたので、自分なりに流れを整理してみました。初心者なので間違いがあれば指摘お願いします。
●ブロックとは?
ブロックはRubyにおいて「do~end」で記述される一塊の処理のこと。
あくまで引数として渡されるため、単独では存在できない。
(do~endのかわりに{ }で記述してもよい)
●引数(ひきすう)とは?
プログラムや関数にわたす値のこと。
●ブロック引数とは?
ブロックに引数として渡すことのできる値。
●実際の使い方(each文)
例:ages = [20, 56, 32]
ages.each do |age|
puts age
end
ages:オブジェクト(この場合は配列)
each:メソッド
do ~ end:ブロック。eachメソッドに引数として渡している。
|age|:ブロック引数。ブロック中の「age」に引数として値を渡す。
流れとして、、、
①オブジェクト(ages)の値をブロック引数としてブロック中のageにわたす。
②ブロック「do〜end」を引数としてeachメソッドにわたす
③上記を配列のそれぞれに対して繰り返す
何が引数で、何にわたすのかを意識してみよう。
〜おまけ〜
上記のプログラムはageの複数形と単数形が混在していて、配列「ages」のそれぞれの値が「age」なのかなと勘違いしそうになった。
試しに
numbers = [20, 56, 32]
numbers.each do |age|
puts age
end
と記述してもエラーはでなかったので、| |の中身とブロック中の中身が対応しているというだけだった。
そもそもeach文は配列に使うものだから、| |の中身をどう記述しようとも、勝手にオブジェクトの中身を取り出してくれるのかな。(調べていたらeach文はハッシュにも使えるらしい)