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