Rubyのブロックとブロックパラメータの使い方
Rubyにおけるブロックとブロックパラメータは、Rubyの強力な機能の一つです。これらを使うことで、コードの再利用性と柔軟性を高めることができます。以下に、その使い方を10の例とともに解説します。
例1: timesメソッドとブロック
まずは、一番簡単な例から始めましょう。以下は、timesメソッドとブロックを使って、"Hello, Ruby!"を5回出力するコードです。
1 2 3 |
5.times do puts "Hello, Ruby!" end |
その通りです、サルモリさん。ブロックパラメータは、ブロック内で使用するための一時的な変数です。次の例でその使用方法を見てみましょう。
KindleUnlimited会員であれば、全ての本をご覧頂けます。 配列、イテレータ、ブロックを理解すれば、Rubyプログラミングの世界が変わる 第1版
例2: timesメソッドとブロックパラメータ
以下は、timesメソッドとブロックパラメータを使って、0から4までの数値を出力するコードです。
1 2 3 |
5.times do |i| puts i end |
その通りです、サルモリさん。Rubyでは、ブロックパラメータを使うことで、ブロック内で一時的に利用する変数を導入できます。この機能は、配列やハッシュを扱う際に特に便利です。
もちろんです、サルモリさん。次に、配列とブロック、そしてブロックパラメータの組み合わせについて見ていきましょう。
例3: 配列とブロック
以下は、配列の各要素に対してブロックを適用するコードです。この例では、配列の各要素を2倍にして出力します。
1 2 3 |
[1, 2, 3, 4, 5].each do |n| puts n * 2 end |
その通りです、サルモリさん。さらに、ブロックとブロックパラメータはハッシュに対しても同じように使用できます。
例4: ハッシュとブロック
以下の例では、ハッシュのキーと値をそれぞれ出力します。このとき、ブロックパラメータは2つ指定しています。
1 2 3 |
{a: 1, b: 2, c: 3}.each do |key, value| puts "キー: #{key}, 値: #{value}" end |
その通りです、サルモリさん。ブロックパラメータは、ブロック内で利用したいデータの数だけ指定することができます。
例5: mapメソッドとブロック
次に、mapメソッドとブロックを使った例を見てみましょう。mapメソッドは、配列の全ての要素に対してブロックを適用し、その結果から新しい配列を作ります。
1 2 3 4 |
result = [1, 2, 3, 4, 5].map do |n| n * 2 end p result # => [2, 4, 6, 8, 10] |
その通りです、サルモリさん。特に、元の配列を変更せずに新しい配列を作りたいときに便利です。
例6: selectメソッドとブロック
selectメソッドは、配列の要素のうちブロックの評価結果が真となるものだけを集めた新しい配列を作ります。
1 2 3 4 |
result = [1, 2, 3, 4, 5].select do |n| n.even? end p result # => [2, 4] |
その通りです、サルモリさん。さらに、反対にブロックの評価結果が偽となる要素だけを集めたいときはrejectメソッドを使います。
例7: rejectメソッドとブロック
次に、rejectメソッドとブロックを使った例を見てみましょう。rejectメソッドは、ブロックの評価結果が偽となる要素だけを集めた新しい配列を作ります。
1 2 3 4 |
result = [1, 2, 3, 4, 5].reject do |n| n.even? end p result # => [1, 3, 5] |
その通りです、サルモリさん。Rubyのブロックは、これだけではなく、より複雑なロジックを記述することも可能です。
例8: mapメソッドとブロック
mapメソッドは、ブロックを評価した結果を新しい配列として返します。つまり、すべての要素に対して何らかの処理を行い、その結果を新しい配列として取得したいときに使います。
1 2 3 4 |
result = [1, 2, 3, 4, 5].map do |n| n * 2 end p result # => [2, 4, 6, 8, 10] |
その通りです、サルモリさん。また、ブロックパラメータの名前は自由につけることができます。nやitemなど、要素の内容を表す名前をつけるとコードが読みやすくなります。
例9: ブロックパラメータの名前
ここでは、ブロックパラメータの名前をitemとしてみます。
1 2 3 4 |
result = ["apple", "banana", "cherry"].map do |item| item.upcase end p result # => ["APPLE", "BANANA", "CHERRY"] |
その通りです、サルモリさん。ブロックパラメータの名前は、コードの可読性を高めるための重要な要素の一つです。
例10: ハッシュとブロック
ブロックは配列だけでなく、ハッシュに対しても使用することができます。ハッシュの場合、ブロックパラメータはキーと値の2つになります。
1 2 3 4 5 6 7 8 |
hash = {a: 1, b: 2, c: 3} hash.each do |key, value| puts "#{key}: #{value}" end # 出力結果: # a: 1 # b: 2 # c: 3 |
はい、その通りですサルモリさん。Rubyのブロックはとても柔軟性が高く、配列やハッシュなど様々なデータ構造に対して使うことができます。また、ブロック内で使用するパラメータの名前は自由に設定できるため、コードの可読性を高めることができます。
ポイント