Rubyのeachとbreakの使い方|両方使う時に知っておきたいことも解説
- システム
エンジニア - Rubyでの繰り返し処理とはどう言ったものでしょうか?
- プロジェクト
マネージャー - ここではeachを使ったオブジェクトの処理についてみていきましょう。
each・breakの基本的な記述方法
Rubyでの繰り返し処理とはどういったものでしょうか?
ここではeachを使ったオブジェクトの処理や、each_with_index・each_line・each_sliceの使い方についても紹介します。
また、each以外の繰り返し処理の方法や、break、nextの使い方についても紹介します。
Rubyで繰り返し処理ができるeachの使い方8つ
今回は、Rubyでのeachを使った繰り返し処理について説明します。
Rubyでは、配列・範囲オブジェクト・ハッシュなどに対してeachで繰り返し処理ができます。
breakで繰り返し処理を抜けることができますし、nextで繰り返し処理をスキップすることができます。
eachの類似として、each_with_index・each_line・each_sliceの使い方についても紹介します。
Rubyでの繰り返し処理に興味のある方はぜひご覧ください。
1:配列
配列に対するeachの繰り返し処理を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# 配列の宣言
array = [ "item1", "item2", "item3", "item4", "item5" ]
# 繰り返し処理
array.each do |item|
puts item
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
item1
item2
item3
item4
item5
|
このように、Rubyでは配列に対してeachで繰り返し処理ができます。
2:範囲オブジェクト
範囲オブジェクトに対するeachの繰り返し処理を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# 範囲オブジェクト
range = 1..5
# 繰り返し処理
range.each do |item|
puts item
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
1
2
3
4
5
|
文字の範囲オブジェクトに対しても、同様です。
1
2
3
4
5
6
7
|
# 範囲オブジェクト
range = 'a'..'e'
# 繰り返し処理
range.each do |item|
puts item
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
a
b
c
d
e
|
このように、Rubyでは範囲オブジェクトに対してeachで繰り返し処理ができます。
3:ハッシュ
ハッシュに対するeachの繰り返し処理を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# ハッシュ
color = {"red":"あか", "blue":"あお", "yellow":"きいろ"}
# 繰り返し処理
color.each { |key, value|
puts "#{key} : #{value}"
}
|
実行結果は以下のようになります。
1
2
3
|
red : あか
blue : あお
yellow : きいろ
|
keyとvalueが表示されていることが分かります。
each_keyを使用すれば、keyだけを出力できます。
1
2
3
4
5
6
7
|
# ハッシュ
color = {"red":"あか", "blue":"あお", "yellow":"きいろ"}
# 繰り返し処理(each_key)
color.each_key { |key|
puts "key : #{key}"
}
|
実行結果は以下のようになります。
1
2
3
|
key : red
key : blue
key : yellow
|
また、each_valueを使用すれば、keyだけを出力できます。
1
2
3
4
5
6
7
|
# ハッシュ
color = {"red":"あか", "blue":"あお", "yellow":"きいろ"}
# 繰り返し処理(each_value)
color.each_value { |value|
puts "value : #{value}"
}
|
実行結果は以下のようになります。
1
2
3
|
value : あか
value : あお
value : きいろ
|
このように、Rubyではハッシュに対してeachで繰り返し処理ができます。
each_keyはkeyだけ、each_valueはvalueだけの繰り返し処理ができます。
4:break
Rubyでは、breakで繰り返し処理を抜けることができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 配列の宣言
array = [ "item1", "item2", "item3", "item4", "item5" ]
# 繰り返し処理
array.each do |item|
if item == "item3"
# 繰り返し処理を抜ける
break
else
puts item
end
end
|
実行結果は以下のようになります。
1
2
|
item1
item2
|
このように、Rubyではbreakで繰り返し処理を抜けることができます。
5:next
Rubyでは、nextで繰り返し処理をスキップすることができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 配列の宣言
array = [ "item1", "item2", "item3", "item4", "item5" ]
# 繰り返し処理
array.each do |item|
if item == "item3"
# スキップする
next
else
puts item
end
end
|
実行結果は以下のようになります。
1
2
3
4
|
item1
item2
item4
item5
|
このように、Rubyではnextで繰り返し処理をスキップすることができます。
6:each_with_index
each_with_indexを使えば、繰り返し処理でインデックスを出力できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# 配列の宣言
array = [ "item1", "item2", "item3", "item4", "item5" ]
# 繰り返し処理
array.each_with_index do |item, i|
puts "index[#{i}] : #{item} "
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
index[0] : item1
index[1] : item2
index[2] : item3
index[3] : item4
index[4] : item5
|
インデックスが出力されていることが分かります。
インデックスの開始値を変更したい場合は、each.with_indexを使用します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# 配列の宣言
array = [ "item1", "item2", "item3", "item4", "item5" ]
# 繰り返し処理
array.each.with_index(10) do |item, i|
puts "index[#{i}] : #{item} "
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
index[10] : item1
index[11] : item2
index[12] : item3
index[13] : item4
index[14] : item5
|
この場合は、インデックス10から始まっています。
このように、Rubyではeach_with_indexを使えば、繰り返し処理でインデックスを出力できます。
7:each_line
each_lineを使えば、ファイルを1行ずつ読み込むことができます。
以下のようなファイルを読み込んで出力してみます。
1
2
3
|
aaa
bbb
ccc
|
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# ファイルオープン
File.open('test.txt') do |file|
# 1行ずつ読み込み
file.each_line do |line|
puts line
end
end
|
実行結果は以下のようになります。
1
2
3
|
aaa
bbb
ccc
|
ファイルの内容が出力されていることが分かります。foreachでも同じことができます。
1
2
3
4
5
|
# ファイルオープン
File.foreach('test.txt') do |line|
# 1行ずつ出力
puts line
end
|
実行結果は以下のようになります。
1
2
3
|
aaa
bbb
ccc
|
このように、Rubyではeach_line・foreachを使えば、ファイルを1行ずつ読み込むことができます。
8:each_slice
each_sliceを使えば、配列を指定数で分割できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
# 範囲オブジェクト
range = 1..20
# 繰り返し処理
range.each_slice(5){|arr|
puts arr.join(" ")
}
|
実行結果は以下のようになります。
1
2
3
4
|
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
|
このように、Rubyではeach_sliceを使えば、配列を指定数で分割できます。
Rubyのbreakの使い方4つ
Rubyの繰り返し処理におけるbreakの使い方を以下4つ紹介します。
1:while文での使い方
2:while文でif文を利用している場合の使い方
3:for文での使い方
4:for文でif文を利用している場合の使い方
1:while文での使い方
Rubyのwhile文で繰り返し処理をbreakによって処理を終了させることができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
|
i = 0
while i < 2 do
puts i
i += 1
break
end
|
実行結果は以下のようになります。
1
|
|
このようにbreakに到達した時点でループを抜けます。一度しか繰り返し処理が実行されないため、0のみが表示されます。
2:while文でif文を利用している場合の使い方
次にwhileメソッドの処理の中でif文を利用した場合のbreakの使い方を見ていきます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
i = 1
while i < 10000 do
if i===5
puts "#{i}. loop done"
break
end
p "#{i}"
i +=1
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
"1"
"2"
"3"
"4"
"5. loop done"
|
このようにwhile文の中にif文の処理でbreakすると、ループ条件に達しなくても終了させることができます。
3:for文での使い方
Rubyのfor文の繰り返し処理でbreakによって処理を終了させることができます。
実際のソースコードを見てみましょう。
1
2
3
4
|
for i in [1, 2, 3, 4, 5]
puts i
break
end
|
実行結果は以下のようになります。
1
|
1
|
for文でもwhileと同様にbreakに到達した時点でループを抜け処理を終了させることができます。
4:for文でif文を利用している場合の使い方
次にforメソッドの処理でif文を利用した場合のbreakの使い方を見ていきます。
実際のソースコードを見てみましょう。
1
2
3
4
|
for i in [1, 2, 3, 4, 5]
break if i == 4
puts i
end
|
実行結果は以下のようになります。
1
2
3
|
1
2
3
|
このようにfor文の中にif文の処理でbreakすると、ループ条件に達しなくても終了させることができます。
Rubyのeachとbreakを両方使う時に知っておきたいこと
Rubyのeachとbreakを両方使う時に知っておきたいことを以下2つ紹介します。
1. eachにbreakを使うと繰り返しが終了する
2. 繰り返しが入れ子になっている場合
それぞれの動きを見ていきましょう。
eachにbreakを使うと繰り返しが終了する
Rubyのeachメソッドでの繰り返し処理でbreakを使用することによって処理を終了させることができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
|
list = [ "item1", "item2", "item3", "item4", "item5" ]
count = 0
list.each do |item|
count += 1
# 条件を判定
if count == 3
break
else
puts item
end
end
|
実行結果は以下のようになります。
1
2
|
item1
item2
|
このようにeach文でもwhile、forと同様にbreakに到達した時点でループを抜けます。
繰り返しが入れ子になっている場合
繰り返し処理の中でさらに繰り返し処理が存在しbreakが実行された場合、一番内側の繰り返しが終了し、外側の繰り返し処理は続けることができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
i = 1
while i <= 3 do
for list in [ "for1", "for2", "for3" ]
puts list
break
end
puts i
i = i + 1
end
|
実行結果は以下のようになります。
1
2
3
4
5
6
|
for1
1
for1
2
for1
3
|
このように内側のfor文は”for1″で処理が終了してますが、while文は条件終了まで処理が継続しています。
- システム
エンジニア - 範囲オブジェクトを利用して順番に処理することも可能ですね。
- プロジェクト
マネージャー - 状況によってはfor文を利用するよりもわかりやすいかもしれませんね。
Rubyのeachとbreakの使い方を覚えよう
いかがでしたでしょうか。Rubyでのeachを使った繰り返し処理について説明しました。
Rubyでは、配列・範囲オブジェクト・ハッシュなどに対してeachで繰り返し処理ができます。
breakで繰り返し処理を抜けることができますし、nextで繰り返し処理をスキップすることができます。
eachの類似として、each_with_index・each_line・each_sliceの使い方についても紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Ruby新着案件New Job
-
RedmineプラグインおよびWEB開発/Ruby/東京都中央区/【WEB面談可】/在宅勤務
月給65万~65万円東京都中央区(新富町駅) -
Webアプリケーション運用保守/Ruby/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(亀戸駅) -
Webアプリケーション開発(既存機能改修)のテスター/Ruby/東京都江東区/【WEB面談可】
月給25万~35万円東京都江東区(亀戸駅) -
Webアプリケーション開発(既存機能改修)/Ruby/東京都江東区/【WEB面談可】
月給45万~60万円東京都江東区(亀戸駅) -
Ansibelの自動構築/Ruby/東京都台東区/【WEB面談可】/テレワーク
月給46万~48万円東京都台東区(浅草駅) -
会計ワークフローの開発/Ruby/東京都新宿区/【WEB面談可】/フルリモート
月給46万~48万円東京都新宿区(新宿駅)