ブロックとは?
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 15/56。
あなたはすでにブロックを書いてきました。each do |x| ... end と書くたびに、do と end の間の部分はブロック(メソッドに渡されるコードの塊)でした。
[1, 2, 3].each do |n|
puts n * 2
endここで、eachは配列のメソッドであり、do |n| ... endがブロックです。eachは各要素に対してブロックを一度ずつ実行し、その要素をnとして渡します。
ブロックは変数に格納する独立したオブジェクトではなく、メソッド呼び出しに直接結びついています。メソッドはブロックを受け取るか受け取らないかのどちらかであり、ほとんどのイテレーションメソッド(each、map、select、times)は、ブロックを1つ受け取るように設計されています。
3.times do |i|
puts "hi #{i}"
endブロックなしでメソッドを呼び出すと、その動作が変わります。ブロックを指定しない [1,2,3].map は、変換された配列ではなくエニュメレータを返します。そのため、ブロックはそのメソッドが何を意味するかの一部なのです。
チャレンジ
初心者入力から整数 n を読み込みます。0 から n - 1 までの i の各値に対して、times メソッドとブロックを使用してメッセージ Iteration <i> を出力してください。
入力が 3 の場合、出力は以下のようになります:
Iteration 0
Iteration 1
Iteration 2チートシート
ブロックは、do |param| ... end の間に記述され、メソッドに渡されるコードの塊です:
[1, 2, 3].each do |n|
puts n * 2
endtimes を使用してブロックを n 回繰り返します。このとき i は 0 から n - 1 まで変化します:
3.times do |i|
puts "hi #{i}"
end自分で試してみよう
n = gets.to_i
# TODO: 各反復を出力するために、ブロック付きの n.times を使用してください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。