記事の内容
この記事では、Rubyでブロックを使う理由を説明します。
ブロックを使うコードと使わないコードの2つを比較するので、違いがわかりやすいはずです。
1から5までを表示させる
1から5までを表示させる処理は、普通にeachを回しながら表示させる方法でもできるし、blockを使ったやり方でもできます。
# blockを使わない | |
def display_number_each | |
(1..5).each do |v| | |
puts v | |
end | |
end | |
# blockを使う | |
def display_number_block(&block) | |
(1..5).each do |v| | |
block.call v | |
end | |
end | |
display_number_each | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 | |
display_number_block do |num| | |
puts num | |
end | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 |
1から5までループする処理を共通化させる
次に、以下の2つの処理について考えてみます。
- 1から5までループさせて、表示する
- 1から5までをループさせて、合計する
「1から5までをループさせて」という処理を共通化するために、ブロックを使います。
blockを使わない処理の場合も書いているので、どこが共通化されていているのか、確認してみて下さい。
# blockを使わない処理 | |
def display_number_each | |
(1..5).each do |v| | |
puts v | |
end | |
end | |
def sum_number_each | |
val = 0 | |
(1..5).each do |v| | |
val += v | |
end | |
puts val | |
end | |
display_number_each | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 | |
sum_number_each | |
# 15 | |
# blockを使う場合の処理 | |
# 1から5まで回す処理 | |
def loop_1_to_5(&block) | |
(1..5).each do |v| | |
block.call v | |
end | |
end | |
# 1から5までを表示する | |
def display_number | |
loop_1_to_5 do |num| | |
puts num | |
end | |
end | |
# 1から5までを足している | |
def sum_number | |
s_v = 0 | |
loop_1_to_5 do |num| | |
s_v += num | |
end | |
puts s_v | |
end | |
display_number | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 | |
sum_number | |
# 15 |
yieldを使う
block.callは、yieldで置き換えることもできます。
# yieldを使っても同じことができます | |
# 1から5まで回す処理 | |
def loop_1_to_5(&block) | |
(1..5).each do |v| | |
yield v | |
end | |
end | |
# 1から5までを表示する | |
def display_number | |
loop_1_to_5 do |num| | |
puts num | |
end | |
end | |
# 1から5までを足している | |
def sum_number | |
s_v = 0 | |
loop_1_to_5 do |num| | |
s_v += num | |
end | |
puts s_v | |
end | |
display_number | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 | |
sum_number | |
# 15 |
eachにblockを渡す
eachのようにblockを受け付けるメソッドには、blockをそのまま渡すこともできます。
# eachのようにblockを受け付けるメソッドには、そのまま渡すこともできます | |
# 1から5まで回す処理 | |
def loop_1_to_5(&block) | |
(1..5).each &block | |
end | |
# 1から5までを表示する | |
def display_number | |
loop_1_to_5 do |num| | |
puts num | |
end | |
end | |
# 1から5までを足している | |
def sum_number | |
s_v = 0 | |
loop_1_to_5 do |num| | |
s_v += num | |
end | |
puts s_v | |
end | |
display_number | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 | |
sum_number | |
# 15 |
-
-
【Python入門】yieldを使って処理をまとめる方法
目次1 1から5までを表示させる処理2 yieldの処理 1から5までを表示させる処理 まずは、普通に以下の関数を実装します。 1から5の数字を表示する関数 1から5の数字を足して、合計を表示する関数 1から5の数字を掛けて、合計を表示する ...
-
-
【PHP入門】yield構文の使い方を説明します
目次1 yieldのメリット2 yieldの使い方3 yieldのメモリ効率を確認 yieldのメリット yeildには、以下の2つのメリットがあります。 処理をまとめることができる メモリの節約ができる では、実際に使い方を見ていきたいと ...