Rubyのブロック構文とyieldの使い方
Rubyにはブロック構文(ブロック付きメソッド)という構文があります。このブロック構文の使い方について説明します。
ブロック構文の例
ブロック構文は、eachメソッドなどで使われます。eachメソッドは、配列[1, 3, 7, 2, 5]の要素を1つずつ取り出し、do-endの記述された処理を実行します。
[1, 3, 7, 2, 5].each do |x| puts x end
xは、取り出された要素が入る変数(ブロック引数)で、そのxについてdo-endまでのことを行ないます。このdo~endをブロック構文と言います。do-endを{ }に置き換えて、以下のように記述することもできます。
[1, 3, 7, 2, 5].each do { |x| puts hensu }
do-end 、{ } いずれの形式でも構わないのですが、1行に収まるときは{ }、複数行になるときはdo endが好まれる傾向があります。
ブロック構文を使ったメソッドの作成
ブロック構文を使ったメソッドは、メソッドに渡されたブロックを実行するyieldを使うことで記述できます。
def block yield end block do puts "This is block"; end
また、yieldに引数を渡すことで、ブロック引数として使うことができます。以下では、”block”をブロック引数のnameに渡しています。
def block yield "block" end block do |name| puts "This is " + name; end
実行結果
This is block
クラスでブロックつきメソッドを使う
また、クラスでもブロックつきメソッドを定義することはできます。以下は、簡易版のeachメソッドをSampleEachクラスに定義する例です。
class SampleEach #初期化時にインスタンス変数@arrayに配列を入れる def initialize(array) @array = array end #簡易版eachメソッド def each i = 0 while i < @array.length #yieldでブロック引数に@array[i]を渡す yield @array[i] i += 1 end end end instance = SampleEach.new([1,2,3,4,5]) instance.each do |x| puts x end
実行結果
1 2 3 4 5