繰り返しのforが難しいと思った方へ 動き方と使い方を説明!

プログラミング

はじめに

for文は意外と理解が難しく、ここで躓いた経験がある人は決して少なくありません。
for文の文法を理解していたとしても、for文を使うべき箇所で使えていないこともあります。

プログラムの基本は「順次」と「分岐」と「反復」ですが、for文は最後の「反復」にあたります。
今回の記事では、「反復」について、その使い所を一つずつ順を追って説明していきます。
説明の際には、画面に特定の文字を出力する例を挙げていきます。

反復を使わない例

まずは、反復を使わずに処理をする場合を考えてみます。

1回だけ処理を行う例

最初に、1回だけ処理をする最も単純な例として、以下のように文字を出力する例を考えてみます。

これは、以下のようにプログラミングすれば出力できます。

複数回処理を行う例

次に、以下のように何度も文字を出力する処理を行う例を考えてみます。

先ほどと同じ要領で、以下のようにプログラミングすれば出力できます。

反復を使う例

先ほどの書き方では、出力する文字数だけプログラミングする量が増えてしまいます。
仮に100文字出力する場合、100行書く必要が出てきてしまいます。

ここで、「反復」の出番です。
「反復」を用いることで、プログラミングする量を減らすことができる場合があります。
「プログラミングする量を減らすことができる場合」とは、「法則がある場合」です。

反復による処理の書き換え

先ほどの例を、「反復」を使って書くとどうなるか、考えてみます。

  • 最初に「☆」を出力する
  • 次に「★」を出力する

というパターンが繰り返されている、という法則があります。

この法則を「反復」というパターンでプログラミングすると、以下のようになります。

無限ループ対策のための終了条件の記載

しかし、先ほどのようにプログラミングしてしまうと、以下のように出力されています。

本当は10文字分、つまり5回分だけ繰り返して欲しいのですが、そうはならずに、処理が繰り返され続けてしまいます。
これは、「無限ループ」と呼ばれるバグであり、実務でも良く見るバグです。

これを防ぐためには、「反復」を止める条件を書く必要があります。
イメージとしては、以下のようにプログラミングする必要があります。

for文の場合の終了条件の書き方

「反復」を止める条件、先ほどの例で言うと「5回分だけ」という部分に関しては、いくつか書き方があります。
for文の場合は、以下の式を使って条件を指定します。

  • 初期化式…繰り返しを始める前の処理
  • 条件式 …繰り返しを続ける条件
  • 変化式 …1回の繰り返しが終わる度に実行される処理

これらの式を記述する上では、「ループカウンタ」と呼ばれる値を用いることが多いです。
ループカウンタとは、今が何回目の繰り返しなのか、というのを示す値です。
1回目の繰り返しなら「1」、2回目の繰り返しなら「2」…といったように増えていく値です。

これらの式を使って「反復」を止める条件を書くと、以下のようになります。

このようにプログラミングした場合、以下のように処理が行われます。

  • 繰り返しの最初でループカウンタが1になる
  • 繰り返しの中の処理で「☆」と「★」を出力する
  • 繰り返しが終わる時にループカウンタを1増やして2にする
  • ループカウンタが5以下なので繰り返しを続ける
  • 繰り返しの中の処理で「☆」と「★」を出力する
  • 繰り返しが終わる時にループカウンタを1増やして3にする
  • ループカウンタが5以下なので繰り返しを続ける
  • 繰り返しの中の処理で「☆」と「★」を出力する
  • 繰り返しが終わる時にループカウンタを1増やして4にする
  • ループカウンタが5以下なので繰り返しを続ける
  • 繰り返しの中の処理で「☆」と「★」を出力する
  • 繰り返しが終わる時にループカウンタを1増やして5にする
  • ループカウンタが5以下なので繰り返しを続ける
  • 繰り返しの中の処理で「☆」と「★」を出力する
  • 繰り返しが終わる時にループカウンタを1増やして6にする
  • ループカウンタが5以下ではないので繰り返しを終える

ループカウンタを用いた複雑な制御

ループカウンタは、繰り返しの中の処理で使うこともできます。
そうすることで、より複雑な処理を書くことができるようになります。

例えば、最初の繰り返しだけ「☆」と「★」の代わりに「□」と「■」を出力したいとします。
出力のイメージは以下です。

このように出力したい場合、以下のように繰り返しの中でループカウンタを使って分岐条件を書くことで、上手くプログラミングすることができます。

後書き

今回は、for文の使い方を、段階を追って説明していきました。
書籍を書く際にも心掛けていることですが、このように段階を追って説明することで、難しいこともわかりやすく説明することができます。

株式会社サイゼントでは、即戦力のJavaプログラマーを育てるための書籍「絶対にJavaプログラマーになりたい人へ」をKindleで販売しています。

同じく、Spring Frameworkについてきめ細かく解説した別冊も販売中です。


また、上記の書籍をテキストとして用いたプログラミングスクール「サイゼントアカデミー」も開校しています。
このスクールは、受託開発事業・SES事業である弊社が、新入社員向けの研修で培ったノウハウを詰め込んだものです。


ご興味がある方は、上記画像から個別ページにアクセスしてみてください!

コメント

タイトルとURLをコピーしました