ループ処理(Do文・For文・While文)はどう使い分ければ良いのか?
この記事では
- ループ処理って色々あってどれ使ったらいいのかわからん!
- 使い分ける基準が知りたい!
というプログラミング初心者に向けてお届けしています。
僕自身、プログラミングを初めてまだ期間は短いですが、最近このループ処理を使い分ける考え方がわかってきましたので、まだ迷っているプログラミング子羊達のためになればと思って書いています。
※私自身まだまだプログラミング歴が浅いため間違いがある可能性があります。もし誤り等あればご指摘いただけると幸いです。
なお、言語はVB.NETをベースに書いています。言語によっては当てはまらないケースもあるかもしれません。
ループ処理(Do文・For文・While文)はどう使い分ければ良いのか?
それでは早速、ループ処理をどう使い分ければよいのかですが、結論から言いますと
ということです。
つまりそのループによってどのような処理をしたいのかということによって、適切なループを選ぶべきだ、ということです。
具体的に言うと、ループ処理の違いは、処理実行の判断の違いで選択するべきです。
例えば、
などなどです。
このように、「何回実行したいのか」や、「どんな条件の時に実行したいのか」、ということで適切なループ処理を選択するべきということです。
では、どんな時にどれを選ぶべきか解説していきます!
コレクションの要素を全て回したい時:For each
コレクションの要素の回数分ループ処理を実行したい時は「For each」を使いましょう。
コレクションとは要素の集まりのことです。
例えば、 ・配列の個数 ・リストの要素 ・テーブルの行数 などです。
それぞれの要素全てに対してループ処理を実行したいという時にFor eachは便利です。 実際のコードで説明します。(VB.NET)
VB
'配列の宣言と初期化
Dim testarray() As String = New String() {"a", "b", "c", "d", "e"}
'配列の要素をすべてコンソール出力
For Each arrayitem As String In testarray
Console.WriteLine(arrayitem)
Next
VB
'リストの宣言と初期化
Dim testlist As New List(Of String)
testlist.Add("あ")
testlist.Add("い")
testlist.Add("う")
testlist.Add("え")
testlist.Add("お")
'リストの要素をすべてコンソール出力
For Each item As String In testlist
Console.WriteLine(item)
Next
VB
'テーブルの宣言とインスタンス化
Dim testtable As New DataTable
testtable.Columns.Add("カラム")
Dim testrow As DataRow
'行の追加
testrow = testtable.NewRow
testrow("カラム") = "1"
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = "2"
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = "3"
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = "4"
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = "5"
testtable.Rows.Add(testrow)
'テーブルの各業の中身をコンソール出力
For Each row As DataRow In testtable.Rows
Console.WriteLine(row.Item(0).ToString)
Next
このように要素を複数持つグループの全ての要素に対して処理を行う場合にFor eachは便利です。
条件がTrueの間だけ繰り返したい時:While
条件式の結果がTrueの間はずっと繰り返し処理を行いたい時はWhileを使いましょう。
例えば、
などです。
実際のコードで説明します。(VB.NET)
VB
'配列の宣言と初期化
Dim testarray() As Integer = New Integer() {10, 50, 35, 80, 24, 101, 37, 69, 123}
'カウント変数の宣言と初期化
Dim count As Integer = 0
'配列の中身が100より小さい間だけコンソール出力
While (testarray(count) < 100)
Console.WriteLine(testarray(count).ToString)
count += 1
End While
VBテーブルの宣言とインスタンス化
Dim testtable As New DataTable
testtable.Columns.Add("カラム")
Dim testrow As DataRow
'行の追加
testrow = testtable.NewRow
testrow("カラム") = True
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = True
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = True
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = False
testtable.Rows.Add(testrow)
testrow = testtable.NewRow
testrow("カラム") = True
testtable.Rows.Add(testrow)
'カウント変数の宣言と初期化
Dim rowcount As Integer = 0
'行の中身がTrueの間だけコンソールに文章を出力
While (testtable.Rows(rowcount).Item(0) = True)
Console.WriteLine("Trueです")
rowcount += 1
End While
このように条件式がTrueの間は繰り返されFalseになった瞬間に、whileから抜けていることがわかります。
For eachでは勝手に次の要素に進んでいたのに対して、whileでは自分でカウンタを進める必要があります。
何回処理するかわからないが絶対1回は処理実行したい時:Doで判定を後に書く
何回処理するかわからないが絶対1回は処理実行したい時はDo Loopで判定を後にすると実現できます。
実際のコードで説明します。(VB.NET)
'カウント変数の宣言と初期化 Dim count As Integer = 0 'カウント変数が0より小さい場合にコンソール出力 Do Console.WriteLine(count) Loop While (count < 1)
このように条件がFalseとなったとしても1回は実行されているのがわかります。
ループ処理(Do文・For文・While文)はどう使い分ければ良いのか?のまとめ
どのループ構文を使っても繰り返し処理は実現できるということが多いですが、その時々で適切なループ処理を実装したほうが、簡易的に書けたり、バグに繋がる可能性が少なくなります。
状況に応じて適切なループ処理を選択できるようになろう!
ディスカッション
コメント一覧
まだ、コメントがありません