for文とwhile文


ほとんどのプログラミング言語で、繰り返し処理にはfor文とwhile文が存在しています。

すると、これらをどう使い分けるのか、疑問がわいてくる人もいるかと思います。

これは、公式に決まっているわけではありませんが、世の中のプログラムではこれらが使分けられているのも事実です。

 

for文は、カウンタの初期化・条件式の設定・カウンタの更新が1文で簡単に記述できる一方で、複雑な条件式や複雑なカウンタの更新になるとコードが分かりづらくなるという特徴があります。

一方のwhile文は、カウンタの初期化・条件式の設定・カウンタの更新を分けて記述する必要がある一方で、複雑な条件式や複雑なカウンタの更新でもコードが分かりやすいという特徴があります。

 

よって、繰り返す回数が分かっている場合(例:探索や並べ替え等)はfor文、

繰り返す回数が分からない場合や、複雑な処理を行う場合はwhile文が向いていると言えます。

 

もちろん、全ての繰り返し処理はどちらでも実現可能ですが、プログラムでは「コードの節約」や「コードの分かりやすさ」のバランスというのも重要なのです。

ですので実のところ、繰り返し構造の基本に載せたプログラムは、後半のパターン3~5のプログラムは更新のタイミングが複雑なのでwhile文の方が良いですが、前半は単純な繰り返しなのでfor文の方が向いています。

 

以下は、for文とwhile文の特徴が分かりやすいプログラムの例です。※C言語で一部分のみとなっています。


「Hello!」を5回出力する(for)

for(i=0; i<5; i++){
    printf("Hello!\n");
}

 

とてもスッキリしていて分かりやすい!

「Hello!」を5回出力する(while)

i = 0;
while(i < 5){
    printf("Hello!\n");
    i++;
}

5回繰り返すだけなのにプログラムが長い・・・



0が入力されるまで「Hello!」を出力する(for)

scanf("%d", &num);
for(; num!=0; ){
    printf("Hello!\n");
    scanf("%d", &num);
}

for文の中身が少し分かりにくい・・・

0が入力されるまで「Hello!」を出力する(while)

scanf("%d", &num);
while(num != 0){
    printf("Hello!\n");
    scanf("%d", &num);
}

条件式の内容が分かりやすい!