はじめに
for文は意外と理解が難しく、ここで躓いた経験がある人は決して少なくありません。
for文の文法を理解していたとしても、for文を使うべき箇所で使えていないこともあります。
プログラムの基本は「順次」と「分岐」と「反復」ですが、for文は最後の「反復」にあたります。
今回の記事では、「反復」について、その使い所を一つずつ順を追って説明していきます。
説明の際には、画面に特定の文字を出力する例を挙げていきます。
反復を使わない例
まずは、反復を使わずに処理をする場合を考えてみます。
1回だけ処理を行う例
最初に、1回だけ処理をする最も単純な例として、以下のように文字を出力する例を考えてみます。
1 |
☆★ |
これは、以下のようにプログラミングすれば出力できます。
1 2 |
「☆」を出力する 「★」を出力する |
複数回処理を行う例
次に、以下のように何度も文字を出力する処理を行う例を考えてみます。
1 |
☆★☆★☆★☆★☆★ |
先ほどと同じ要領で、以下のようにプログラミングすれば出力できます。
1 2 3 4 5 6 7 8 9 10 |
「☆」を出力する 「★」を出力する 「☆」を出力する 「★」を出力する 「☆」を出力する 「★」を出力する 「☆」を出力する 「★」を出力する 「☆」を出力する 「★」を出力する |
反復を使う例
先ほどの書き方では、出力する文字数だけプログラミングする量が増えてしまいます。
仮に100文字出力する場合、100行書く必要が出てきてしまいます。
ここで、「反復」の出番です。
「反復」を用いることで、プログラミングする量を減らすことができる場合があります。
「プログラミングする量を減らすことができる場合」とは、「法則がある場合」です。
反復による処理の書き換え
先ほどの例を、「反復」を使って書くとどうなるか、考えてみます。
- 最初に「☆」を出力する
- 次に「★」を出力する
というパターンが繰り返されている、という法則があります。
この法則を「反復」というパターンでプログラミングすると、以下のようになります。
1 2 3 4 |
繰り返し開始 「☆」を出力する 「★」を出力する 繰り返し終了 |
無限ループ対策のための終了条件の記載
しかし、先ほどのようにプログラミングしてしまうと、以下のように出力されています。
1 |
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★…(以降、際限なく繰り返し) |
本当は10文字分、つまり5回分だけ繰り返して欲しいのですが、そうはならずに、処理が繰り返され続けてしまいます。
これは、「無限ループ」と呼ばれるバグであり、実務でも良く見るバグです。
これを防ぐためには、「反復」を止める条件を書く必要があります。
イメージとしては、以下のようにプログラミングする必要があります。
1 2 3 4 |
繰り返し開始(5回分だけ) 「☆」を出力する 「★」を出力する 繰り返し終了 |
for文の場合の終了条件の書き方
「反復」を止める条件、先ほどの例で言うと「5回分だけ」という部分に関しては、いくつか書き方があります。
for文の場合は、以下の式を使って条件を指定します。
- 初期化式…繰り返しを始める前の処理
- 条件式 …繰り返しを続ける条件
- 変化式 …1回の繰り返しが終わる度に実行される処理
これらの式を記述する上では、「ループカウンタ」と呼ばれる値を用いることが多いです。
ループカウンタとは、今が何回目の繰り返しなのか、というのを示す値です。
1回目の繰り返しなら「1」、2回目の繰り返しなら「2」…といったように増えていく値です。
これらの式を使って「反復」を止める条件を書くと、以下のようになります。
1 2 3 4 5 6 7 |
繰り返し開始 初期化式:ループカウンタを1にする 条件式 :ループカウンタが5以下なら処理を続ける 変化式 :ループカウンタを1増やす 「☆」を出力する 「★」を出力する 繰り返し終了 |
このようにプログラミングした場合、以下のように処理が行われます。
- 繰り返しの最初でループカウンタが1になる
- 繰り返しの中の処理で「☆」と「★」を出力する
- 繰り返しが終わる時にループカウンタを1増やして2にする
- ループカウンタが5以下なので繰り返しを続ける
- 繰り返しの中の処理で「☆」と「★」を出力する
- 繰り返しが終わる時にループカウンタを1増やして3にする
- ループカウンタが5以下なので繰り返しを続ける
- 繰り返しの中の処理で「☆」と「★」を出力する
- 繰り返しが終わる時にループカウンタを1増やして4にする
- ループカウンタが5以下なので繰り返しを続ける
- 繰り返しの中の処理で「☆」と「★」を出力する
- 繰り返しが終わる時にループカウンタを1増やして5にする
- ループカウンタが5以下なので繰り返しを続ける
- 繰り返しの中の処理で「☆」と「★」を出力する
- 繰り返しが終わる時にループカウンタを1増やして6にする
- ループカウンタが5以下ではないので繰り返しを終える
ループカウンタを用いた複雑な制御
ループカウンタは、繰り返しの中の処理で使うこともできます。
そうすることで、より複雑な処理を書くことができるようになります。
例えば、最初の繰り返しだけ「☆」と「★」の代わりに「□」と「■」を出力したいとします。
出力のイメージは以下です。
1 |
□■☆★☆★☆★☆★ |
このように出力したい場合、以下のように繰り返しの中でループカウンタを使って分岐条件を書くことで、上手くプログラミングすることができます。
1 2 3 4 5 6 7 8 9 10 11 |
繰り返し開始 初期化式:ループカウンタを1にする 条件式 :ループカウンタが5以下なら処理を続ける 変化式 :ループカウンタを1増やす もしループカウンタが1の場合は 「□」を出力する 「■」を出力する そうではない場合は 「☆」を出力する 「★」を出力する 繰り返し終了 |
後書き
今回は、for文の使い方を、段階を追って説明していきました。
書籍を書く際にも心掛けていることですが、このように段階を追って説明することで、難しいこともわかりやすく説明することができます。
株式会社サイゼントでは、即戦力のJavaプログラマーを育てるための書籍「絶対にJavaプログラマーになりたい人へ」をKindleで販売しています。
同じく、Spring Frameworkについてきめ細かく解説した別冊も販売中です。
また、上記の書籍をテキストとして用いたプログラミングスクール「サイゼントアカデミー」も開校しています。
このスクールは、受託開発事業・SES事業である弊社が、新入社員向けの研修で培ったノウハウを詰め込んだものです。
ご興味がある方は、上記画像から個別ページにアクセスしてみてください!
コメント