1

forループの例の背後にある概念を理解しようとしています

for (;;)
{
//write code
}

それが何をするのか、どのように while(true) と同じループ構造なのかは理解していますが、私の質問は...これは良いプログラミング手法であり、このタイプのループ構造はどのようなアプリケーションに適用されるのでしょうか?

4

5 に答える 5

3

これが望ましい動作である状況がいくつかあります。たとえば、カートリッジ ベースのゲーム コンソールのゲームでは、通常、メイン ループに終了条件がありません。これは、プログラムが終了するオペレーティング システムがないためです。コンソールの電源がオフになるまでループが実行されます。

もう 1 つの例は、モジュールが別のモジュールからのアクションをリッスンする場合です。常にリッスンする必要があるため、リスナーは無限の時間またはプログラムがオフになるまでリッスンする必要があります。ソケット、スレッド、UIComponents と同様です。

無限ループの概念に悪い慣習はありませんが、意図しない無限ループを作成したり、ループのプログラム制御を失ったりした場合など、それが望まれない場合やシステムの機能を損なう場合は、それを考慮することができます。

無限ループを適切な方法にするには:

  1. それが望ましい動作であることを確認してください。停止条件がある場合は、無限ループを回避してください!
  2. for(;;)またはで明示的にしwhile(true)ます。式ではトートロジーを避け、シンプルに行いましょう。
  3. 耐障害性を持たせ、予想される例外を救出し、適切な処理を行います!
  4. そして最も重要なこと!シンプルな無限ループを作ろう!
于 2012-08-12T15:06:05.083 に答える
1
while(abortRequested)
{
  // ....
}

とほぼ同等

while(true)
{
   // ...

   // ... dozens of lines of code ...

   if(abortRequested)
     break;

   // prepare next iteration
}

あるいは、これは、すべての非デーモン スレッドが完了すると自動的に終了するデーモン スレッドで実行することもできます。したがって、これらの構造の意味は一般的に次のとおりです。

明示的な終了イベントが受信されない限り、デフォルトで永久に実行し続ける必要があります。

于 2012-08-12T15:02:14.153 に答える
0

一般的には問題ありません。心配する必要はありません。それはプログラマーの好みに関するものです。

while(true)の観点からは、よりエレガントな形の無限ループの方が好きです。他の誰かがfor(;;)アプローチを好むかもしれません。

于 2012-08-12T15:00:04.337 に答える
0

これは個人的な好みの問題です。たとえば、私はこのスタイルを非常に好みます。

 while (true) {
     // Do infinite task
 }

それはすべて読みやすさにかかっています。読みやすく、数か月後に理解しやすいものを選んでください。

于 2012-08-12T15:01:00.357 に答える
0

1つの観点は次のとおりです。Whileはイベント/条件ベースに似ています..ループを終了する何かが発生するまでループを実行する場所。一方、 for ループは、ループが何回発生するかを指定するカウンターベースのようなものです。少なくとも、そのための明確な規定があります。

もちろん、技術的にはどちらも同じで、どちらも実行条件をチェックしてループサイクルを開始します。

于 2012-08-12T15:08:14.317 に答える