これは重要な質問 です。構文やセマンティクスに関しては言わないでください。質問は、
WHILE
ループとFOR
ループ、for ループに書かれていることはすべて while ループで実行できるのに、なぜ 2 つのループがあるのでしょうか。
これはケンブリッジ大学のセミナーで出題されます。そのため、パフォーマンスのオーバーヘッドと WC の複雑さの観点から説明する必要があると思います。
Floyd-Hoare ロジックの観点から行かなければならないと思います
これは重要な質問 です。構文やセマンティクスに関しては言わないでください。質問は、
WHILE
ループとFOR
ループ、for ループに書かれていることはすべて while ループで実行できるのに、なぜ 2 つのループがあるのでしょうか。
これはケンブリッジ大学のセミナーで出題されます。そのため、パフォーマンスのオーバーヘッドと WC の複雑さの観点から説明する必要があると思います。
Floyd-Hoare ロジックの観点から行かなければならないと思います
パフォーマンスのオーバーヘッドに関する限り、それは使用しているコンパイラと言語によって異なります。
これらの主な違いは、for ループは何かのコレクションを反復処理するときに読みやすく、while ループは特定の条件またはブール フラグが評価されるときに読みやすいということです。
2 つのループ構造の唯一の違いは、ループのヘッダーでループ前の初期化とループ後の変更を行う機能for
です。の間にパフォーマンスの違いはありません
while (condition) {
...
}
と
for ( ; condition ; ) {
...
}
構成します。利便性と読みやすさのために代替が追加されています。他の意味はありません。
明らかに 2 つのループは必要ありません。必要なのは 1 つだけです。そして実際、多くの教科書では、しばらく前に初期化ステートメントでdesugarする言語 (通常は という名前Imp
) を検討しています。 for
while
そうは言っても、ループの不変条件の違いと、これら 2 つのループの Hoare ロジックの関連するルールを調べてみると、init ブロックが原因で、わずかに違います。これは宿題のようですので、詳細はお任せします。
したがって、答えは次のとおりです。
これまでのところ、他の回答のどれも、区別の本当に重要な部分があなたの質問にあると私が思うことを指摘していません:それはおそらく、Hoare接続詞で物事を少し変えることです...
また、Hoare ロジックに基づいてパフォーマンスを推測するのはばかげていることに注意してください。セマンティクスに関心がある場合、教授はおそらく気にしないか、パフォーマンスについて聞きたくないでしょう:-)
if-goto ステートメントですべてを実行できます。では、なぜループが発生するのでしょうか。これは、開発者の作業を楽にし、より構造化された (より小さくて読みやすい) コードを記述できるようにするための構文糖衣です。性能とは関係ありません
違いは、for()
ループは多数のステップを 1 行に凝縮することです。最終的に、すべての答えはこのように構文または意味論に要約されるため、本当に満足できる答えはありません。
while()
ループは、ループが終了する条件のみを示しますが、ループはこれfor()
に加えて、測定する変数とカウンターを規定できます。
(実際には、ループは非常に用途が広く、ループをかなり凝ったものにするために宣言内で多くのことが起こりますが、上記のステートメントは、実稼働環境であっても、これまでに目for()
にするほとんどすべてのループをまとめたものです。)for()
この 2 つの違いに関係する場合があるのは、while ループには for ループよりも複雑な条件を課すことができるということです。
FOR ループは、予測可能なサイズのコレクションをループ処理する場合に最適です。
これは構文的に考えられると思いますが、 for ループは while ループでできることは何でもできるという概念に反論していると思いますが、その逆は確かに正しいです