ぷろぐらみんぐ学習帳

プログラミング初心者の学習記録です。2020年12月に勉強開始。

ブロック引数について整理してみた(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文はハッシュにも使えるらしい)