1. ホーム
  2. c++

[解決済み] do {...} while ( )」ループの必要性はあるのでしょうか?

2023-07-21 16:52:58

質問

Bjarne Stroustrup (C++ の作者) はかつて、自分は "do/while" ループを避け、代わりに "while" ループでコードを記述することを好むと言いました。[以下の引用を参照]。

これを聞いてから、私はこれが真実であることを知りました。 皆さんはどう思われますか? 代わりに"while"を使うよりも、"do/while"の方がずっときれいでわかりやすい例ってありますか?

いくつかの回答に対して:はい、私は "do/while" と "while" の技術的な違いについて理解しています。 これは、可読性とループを含むコードの構造化に関するより深い質問です。

別の方法で質問させてください。仮に "do/while" の使用が禁止されていたとします。

C++プログラミング言語」6.3.3より。

私の経験では、do-statementはエラーと混乱の元である。 その理由は、条件が評価される前に、その本体が常に一度だけ実行されるからです。 しかし、本体が正しく動作するためには、1回目でも条件に非常によく似たものが保持されていなければなりません。 私は、プログラムが最初に書かれテストされたとき、あるいはその前のコードが修正された後で、その条件が期待通りに保持されないことを、想像以上に頻繁に発見してきました。 その結果、私はdo-statementsを避ける傾向があります。 -Bjarne

do/whileループを回避することは、"Do/While "メソッドに含まれる推奨事項です。 C++コア・ガイドライン として ES.75, do-statementsの回避 .

どのように解決するのですか?

do whileループがwhileループに書き換えられることには同意しますが、常にwhileループを使用する方が良いということには同意しません。do whileは少なくとも一度は実行され、それは非常に有用な特性です(最も典型的な例は、キーボードからの入力チェックです)。

#include <stdio.h>

int main() {
    char c;

    do {
        printf("enter a number");
        scanf("%c", &c);

    } while (c < '0' ||  c > '9'); 
}

もちろんこれはwhileループに書き換えることができますが、通常はこちらの方がよりエレガントなソリューションと見なされます。