Blog
ブログで学ぶUX

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
投稿日:
カテゴリ: Web制作