Rubyの繰り返し構文であるfor文の使い方を紹介|for文を抜ける方法も理解しよう
- システム
エンジニア - 繰り返し処理を行うfor文について教えてください。
- プロジェクト
マネージャー - では実際のコードを見ながら詳しく説明していきますね。
Rubyの繰り返し処理 – for文の使い方とは?
今回は、Rubyの繰り返し構文であるforの使い方について説明します。
範囲オブジェクトや配列の要素数分繰り返すには、for文を使うことがあります。
また、for文のブロックから抜ける方法や、ブロック処理をスキップする方法についても紹介します。
for文の使い方に興味のある方はぜひご覧ください。
Rubyの繰り返し構文はfor文だけではありません。
繰り返し構文は、times、while、each、upto、downto、step、loopなどがありますので、ここでご紹介するfor文以外もぜひ勉強してみてください。
範囲オブジェクトの要素数分繰り返す方法
Rubyには範囲オブジェクトがあります。
範囲オブジェクトの要素数分繰り返すには、for文を使うことがあります。
実際のソースコードを見てみましょう。
1
2
3
4
5
|
for num in 1..5 do
print("number : ", num, "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
number : 1
number : 2
number : 3
number : 4
number : 5
|
1~5までの範囲オブジェクトの要素数分出力されることが分かります。
範囲オブジェクトの..を…に変更すれば、最終要素を含まないループになります。
実際のソースコードを見てみましょう。
1
2
3
4
5
|
for num in 1...5 do
print("number : ", num, "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
|
number : 1
number : 2
number : 3
number : 4
|
1~4までの要素が出力されることが分かります。
次に、文字列の範囲オブジェクトのfor文を見てみましょう。
1
2
3
4
5
|
for char in "a".."e" do
print("character : ", char, "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
character : a
character : b
character : c
character : d
character : e
|
“a”~”e”までの範囲オブジェクトの要素数分出力されることが分かります。
次に、日付の範囲オブジェクトのfor文を見てみましょう。
1
2
3
4
5
6
7
|
require 'date'
for date in Date.parse("2020-09-01")..Date.parse("2020-09-05") do
print("date : ", date, "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
date : 2020-09-01
date : 2020-09-02
date : 2020-09-03
date : 2020-09-04
date : 2020-09-05
|
“2020-09-01″~”2020-09-05″までの範囲オブジェクトの要素数分出力されることが分かります。
このように、Rubyでは範囲オブジェクトの要素数分繰り返すには、for文を使うことがあります。
配列の要素数分繰り返す方法
Rubyにおいて配列の要素数分繰り返すには、for文を使うことがあります。
実際のソースコードを見てみましょう。
1
2
3
4
5
|
for num in [1, 3, 5, 7, 9]
print("number : ", num , "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
number : 1
number : 3
number : 5
number : 7
number : 9
|
配列の要素数分出力されていることが分かります。
次に、文字列配列のfor文を見てみましょう。
1
2
3
4
5
|
for char in ["a", "c", "e", "g", "i"]
print("character : ", char , "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
5
|
character : a
character : c
character : e
character : g
character : i
|
配列の要素数分出力されていることが分かります。
次に、配列にデータを格納するサンプルを作成してみます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 10個の要素を持つ配列を作成する
array_size = 10
datas = Array.new(array_size)
# データを格納する
for i in 0..array_size-1
datas[i] = i * 2
end
# 配列の内容を表示する
p datas
|
実行結果は以下のようになります。
1
|
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
|
配列の要素をfor文で繰り返し、要素に値を格納しています。
格納した結果を標準出力しています。
次に、2次元配列にデータを格納するサンプルを作成してみます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 4行5列の配列とする
rows = 4
cols = 5
# 2次元配列を作成する
datas = Array.new(rows)
for i in 0..rows-1
datas[i] = Array.new(cols)
end
# 2次元配列に値を格納する
for row in 0..rows-1
for col in 0..cols -1
datas[row][col] = row * col;
end
end
# 2次元配列の値を表示する
for row in 0..rows-1
p datas[row]
end
|
実行結果は以下のようになります。
1
2
3
4
|
[0, 0, 0, 0, 0]
[0, 1, 2, 3, 4]
[0, 2, 4, 6, 8]
[0, 3, 6, 9, 12]
|
2次元配列の作成、値の格納、値の表示でfor文の繰り返し処理を使用しています。
このように、Rubyにおいて配列の要素数分繰り返すには、for文を使うことがあります。
for文を抜ける方法 “break”
Rubyでは、for文のブロックを抜けるには”break”を使用します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
for num in 1..5 do
if num == 4 then
print("break")
break
end
print("number : ", num, "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
|
number : 1
number : 2
number : 3
break
|
numが4になったらbreakすることで、for文のブロックを抜けていることが分かります。
このように、Rubyではfor文のブロックを抜けるには”break”を使用します。
for文をスキップする方法 ”next”
Rubyでは、for文のブロック処理をスキップするには”next”を使用します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
for num in 1..5 do
# 3の場合にスキップする
next if num == 3
print("number : ", num, "\r\n")
end
|
実行結果は以下のようになります。
1
2
3
4
|
number : 1
number : 2
number : 4
number : 5
|
numが3の場合に、nextを実行することでfor文のブロックをスキップします。
C言語などで言うところのcontinueに相当します。
このように、Rubyではfor文のブロックをスキップするには”next”を使用します。
- システム
エンジニア - 指定した部分でループ処理が行われると言うことですね。
- プロジェクト
マネージャー - 繰り返し構文は他にもあります。どんどんご自分でコードを書いて覚えていきましょう。
他のRubyの繰り返し構文も学んでみよう
いかがでしたでしょうか。
範囲オブジェクトや配列の要素数分繰り返す処理について、for文を使った方法を紹介しました。
また、for文のブロックから抜ける方法 “break” やブロック処理をスキップする方法 “next” も説明しました。
Rubyには、C言語のcontinueがないため、nextを使ってcontinueを実現します。
Rubyの繰り返し構文はfor文だけではありません。for文以外の繰り返し構文(times、while、each、upto、downto、step、loopなど)も勉強してみてください。
ぜひご自身でソースコードを書いて、理解を深めてください。
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万円東京都新宿区(新宿駅)