for文とwhile文の違い、使い分け方

for文とwhile文の違い、使い分け方【ゼロから始めるJavaの基礎~その24~】

これまで数回にわたって反復構造(繰り返し)を作るさいに使うことが出来る『for文』や『while文』、『do~while文』をご紹介してきました。
『while文』と『do~while文』の違いについては『do~while文』のトピックでご紹介しましたし、直感的にも違いは分かりやすかったかと思います。

では『for文』と『while文』の違いについてはいかがでしょうか?
反復構造を実装できるということに関しては両者の違いはほとんど無いと言っても過言ではないでしょう。

今回はそんな少し分かり辛い『for文』と『while文』の違い、そして使い分けの方法をご紹介したいと思います。

『for文』と『while文』の違い

『for文』と『while文』の違いについては、はっきり言って特筆するような違いはありません。
どちらの構文を使っても同じような反復処理を実装することが出来ます。

もともと別の構文として勉強をしてきた皆さんからすれば「別の構文なんだから、構文は違って当たり前でしょ?」と思われるかもしれませんが、違いは構文くらいです。

『for文』はカウンタ変数や条件式、変化式を最初に設定しますよね。
ルールに従って、それぞれの式を記述すればいいので、その段階でミスをするということは比較的起こりにくいと言えると思います。

対して『while文』は『( )』の中には条件式しか記述しません。
カウンタの役割を持たせる変数や、その変数の値を変化させる式もプログラマ自身が記述する方法から、記述する場所まで決めなければなりません

そのため、変化式を記述し忘れて意図せず無限ループを作り出してしまったり、変化させるタイミングを間違えてしまったりといったミスをしてしまう可能性があります。

『while文』で繰り返しを実装する場合には『for文』で実装するときよりも、実装の内容に注意を払う必要があるでしょう。

『for文』と『while文』の使い分け方

冒頭からのながれだと、まるで『while文』が悪者であるかのような紹介になってしまいましたが、『for文』と『while文』にはそれぞれ得意な繰り返しの処理というのがあります。

繰り返しを実装する際に『for文』と『while文』どちらの構文を使えばいいのか迷った場合には、これからご紹介する基準で使い分けをしてみるのがおすすめです。

繰り返しの回数が決まっている場合は『for文』

for(int i = 0; i < 10; i++){ }

タイトルの通り、繰り返しの回数があらかじめ決まっている場合には、『for文』を使うのがよいでしょう。

上にもコードを記述しましたが、『for文』の場合は繰り返し処理の1行目を見るだけで、『カウンタ変数の初期値はいくつなのか』、『何回繰り返すのか』、『カウンタ変数の増減値はいくつか』などの情報が分かります。

『while文』の場合はこれらの情報が、コードの各所に散らばる形で記述され、一目で把握することが難しくなります。
同じ内容が実装できていたとしても、コードの可読性という面からみると、繰り返しの回数が決まっている場合は『for文』で実装したほうがより良いコードで実装が出来るでしょう。

また、カウンタ変数の変化式を記述し忘れるというのは単純で簡単なミスですが、本当によく起こるミスでもあります。
こういったミスを減らす目的でも『for文』の方が適切だと言えますね。

配列などの集合体に対して繰り返し処理を行うような場合も、『for文』を使用したほうがよいでしょう。

繰り返しの回数が決まっていない場合は『while文』

繰り返しの回数が決まっていない場合などは、『for文』で繰り返しの処理を実装するよりも『while文』で実装する方がおすすめです。
『while文』は条件を満たし続ける限りは繰り返しを続ける、という処理が『for文』より直感的に実装しやすく可読性の高いコードが書きやすいです。

繰り返しの回数が決まっていない繰り返しを実装する際には、まず『while文』での実装を検討してみてください。