Ruby-ブロック

多数のステートメントを配置できるメソッドをRubyがどのように定義し、そのメソッドを呼び出すかを見てきました。同様に、Rubyにはブロックの概念があります。

  • ブロックはコードのチャンクで構成されます。

  • ブロックに名前を割り当てます。

  • ブロック内のコードは常に中括弧({})で囲まれています。

  • ブロックは常に、ブロックと同じ名前の関数から呼び出されます。これは、testという名前のブロックがある場合、関数testを使用してこのブロックを呼び出すことを意味します。

  • イールドステートメントを使用してブロックを呼び出します。

構文

block_name {
   statement1
   statement2
   ..........
}

ここでは、簡単なyieldステートメントを使用してブロックを呼び出す方法を学習します。また、ブロックを呼び出すためのパラメーターを指定して、yieldステートメントを使用する方法も学習します。両方のタイプのyieldステートメントを使用してサンプルコードを確認します。

利回りステートメント

歩留まりステートメントの例を見てみましょう-

#!/usr/bin/ruby

def test
   puts "You are in the method"
   yield
   puts "You are again back to the method"
   yield
end
test {puts "You are in the block"}

これにより、次の結果が生成されます-

You are in the method
You are in the block
You are again back to the method
You are in the block

また、yieldステートメントを使用してパラメーターを渡すこともできます。ここに例があります-

#!/usr/bin/ruby

def test
   yield 5
   puts "You are in the method test"
   yield 100
end
test {|i| puts "You are in the block #{i}"}

これにより、次の結果が生成されます-

You are in the block 5
You are in the method test
You are in the block 100

ここでは、yieldステートメントの後にパラメーターが記述されています。複数のパラメーターを渡すこともできます。ブロック内で、2本の垂直線(||)の間に変数を配置して、パラメーターを受け入れます。したがって、上記のコードでは、yield5ステートメントは値5をパラメーターとしてテストブロックに渡します。

さて、次のステートメントを見てください-

test {|i| puts "You are in the block #{i}"}

ここで、値5は変数iで受け取られます。ここで、次のputsステートメントを観察します-

puts "You are in the block #{i}"

このputsステートメントの出力は次のとおりです。

You are in the block 5

複数のパラメーターを渡したい場合、yieldステートメントは次のようになります。

yield a, b

そしてブロックは-です

test {|a, b| statement}

パラメータはコンマで区切られます。

ブロックとメソッド

ブロックとメソッドを相互に関連付ける方法を見てきました。通常、ブロックと同じ名前のメソッドからyieldステートメントを使用してブロックを呼び出します。したがって、あなたは書く-

#!/usr/bin/ruby

def test
   yield
end
test{ puts "Hello world"}

この例は、ブロックを実装する最も簡単な方法です。イールドステートメントを使用してテストブロックを呼び出します。

ただし、メソッドの最後の引数の前に&が付いている場合は、このメソッドにブロックを渡すことができ、このブロックは最後のパラメーターに割り当てられます。*と&の両方が引数リストに存在する場合、&は後で来る必要があります。

#!/usr/bin/ruby

def test(&block)
   block.call
end
test { puts "Hello World!"}

これにより、次の結果が生成されます-

Hello World!

BEGINブロックとENDブロック

すべてのRubyソースファイルは、ファイルのロード中(BEGINブロック)およびプログラムの実行終了後(ENDブロック)に実行されるコードのブロックを宣言できます。

#!/usr/bin/ruby

BEGIN { 
   # BEGIN block code 
   puts "BEGIN code block"
} 

END { 
   # END block code 
   puts "END code block"
}
   # MAIN block code 
puts "MAIN code block"

プログラムには、複数のBEGINブロックとENDブロックが含まれる場合があります。BEGINブロックは、検出された順序で実行されます。ENDブロックは逆の順序で実行されます。上記のプログラムを実行すると、次の結果が得られます。

BEGIN code block
MAIN code block
END code block