Menu
Coddy logo textTech

ブロック引数

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 18/56。

パイプ記号(|)で囲まれた変数 |x||x, y| は、ブロックパラメータです。これらは、メソッドがブロックに渡す値に名前を付けます。

メソッドによって、1つの値を渡すものもあれば、複数の値を渡すものもあります。each は一度に1つの要素を渡します:

[10, 20, 30].each { |n| puts n }

each_with_indexは、要素とそのインデックスの2つを渡します:

["a", "b", "c"].each_with_index do |letter, i|
  puts "#{i}: #{letter}"
end
# 0: a
# 1: b
# 2: c

ハッシュをイテレートする場合、ブロックパラメータはキーと値になります:

{ a: 1, b: 2 }.each do |key, value|
  puts "#{key} = #{value}"
end

ブロックパラメータの数と順序は、メソッドが何を yield するかによって決まります。迷ったときは、ドキュメントを確認するか、パラメータを1つ試してみて何が得られるかを確認してください。

challenge icon

チャレンジ

簡単

ハッシュscoresが与えられています。to_a形式に対してeach_with_indexを使用して反復処理を行い、(name, points)のペアとその位置の両方にアクセスできるようにします。各エントリを次の形式で1行ずつ出力してください:

<rank>. <name> - <points>

ここで、rankは(0ではなく)1から始まります。

デフォルトのハッシュの場合、出力は次のようになります:

1. Alice - 90
2. Bob - 85
3. Cara - 78

チートシート

ブロックパラメータはパイプ |...| の間に記述され、メソッドから渡された値を受け取ります:

# each – 1つのパラメータ
[10, 20, 30].each { |n| puts n }

# each_with_index – 要素とインデックス
["a", "b", "c"].each_with_index do |letter, i|
  puts "#{i}: #{letter}"
end

# hash each – キーと値
{ a: 1, b: 2 }.each do |key, value|
  puts "#{key} = #{value}"
end

hash.to_a はハッシュを [key, value] のペアの配列に変換します。これは each_with_index と一緒に使うと便利です:

{ a: 1, b: 2 }.to_a.each_with_index do |(key, value), i|
  puts "#{i}: #{key} = #{value}"
end

自分で試してみよう

scores = { "Alice" => 90, "Bob" => 85, "Cara" => 78 }

# TODO: 各エントリに対して "<rank>. <name> - <points>" を出力する。ランクは1から開始する。
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン