【C言語】「continue文」は繰り返し処理の先頭に戻るって誰が言い出したの?【雑記】

スポンサーリンク
programming 雑記
スポンサーリンク

はじめに

なんだかんだ10年くらいプログラミングをやっているので、初心者の方からプログラミングについて質問を受けたり、なんだったらプログラミングの講義をすることも多いです。

そこで地味に勘違いしている方が多いのが「continue文」についてです。

いったい誰が「continue文」は「繰り返し処理の先頭に戻る」と言い出したのでしょうか…。

ネットで検索してみると 「繰り返し処理の先頭に戻る文」、「ループの最初に戻る文」等の誤った説明がたくさん。

実際には挙動が異なるため、苦し紛れに「for文の時は特別な処理~」「do~while文の時は条件のチェックをしてから~」等の追加説明までしている始末。

元から説明が間違ってたらそりゃ間違って覚えるよねという…。

continue文の正しい説明は?

ということで早速結論ですが、「continue文」の正しい説明は「最も内側の繰り返し処理の最後に移動する文」です。

次の図では、繰り返しの中で「continue文」が処理された場合に、「処理2」を飛ばして処理の最後(図中でいうと「}」)に移動していることを示しています。

continue文の挙動

continue文の挙動はたったこれだけです。簡単ですよね?

なんで変な説明があるのか邪推してみた

「continue文は」ただ「最も内側の繰り返し処理の最後に移動する文」で、説明も理解も簡単です。

これが「繰り返し処理の先頭に戻る」などといった説明に変化するのか疑問に思うくらいです。

しかし、「繰り返し処理の最後」という表現がわかりにくく、「繰り返し処理の最後ってどこ?」となる気持ちはわからなくもないのです。

例えば、次のコードの「繰り返し処理の最後」はどこですか?もっと言うと、このコードでは「continue文」はどのような挙動をしますか?

#include <stdio.h>

int main() {

    int i;

    //繰り返し処理
    for(i = 0; i < 10; i++)
      if(i == 0){
        printf("%d\n", i);
        continue;
      }//強いて言うならここが繰り返し処理の最後?

    return 0;
}

このコードだと「繰り返し処理の最後」を指し示すこと自体が難しくないですか?

「continue文」の挙動を示すなら「繰り返し処理の最初に移動して繰り返し順が1つ先に進む」のような説明をしたくなりませんか?

文法上、説明し難いパターンがあるから変な説明になった?

ところで、前述のコード。ややトリッキーに書いてあり文法上に問題があるように見えますが、別に文法上はなんの問題もない記述方法になっています。

for文、while文は次の形式で書きます。

for(繰り返し処理の最初に実施される式; 継続条件; 繰り返し処理の最後に実施される式) 文
while(継続条件) 文

どちらも継続条件が満たされている間、文が実行されます。「文」と言うのが重要なポイントで、「if文」も「{」と「}」で囲った複文も同じ「文」です。

このため、前述のコードは文法上問題ありません。

初心者に教える時に文のことを詳しく説明することは皆無

「文」のことを詳しく説明している初心者向けのサイト(参考書も)はほぼ皆無と言ってもいいです。その上、講師側でも知らない人がいることもあります。

このため、「文」の理解がないとわからない「繰り返し処理の最後」より、誰でも直感的にわかる「繰り返し処理の先頭」が好まれて説明されているのかなと思いました。

最後に

色々邪推してみたものの、正しい説明をするならば「continue文」は「最も内側の繰り返し処理の最後に移動する文」です。

ややこしい解釈をしている人や、勘違いしている人がいたら教えてあげてください!

コメント

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