forループの例の背後にある概念を理解しようとしています
for (;;)
{
//write code
}
それが何をするのか、どのように while(true) と同じループ構造なのかは理解していますが、私の質問は...これは良いプログラミング手法であり、このタイプのループ構造はどのようなアプリケーションに適用されるのでしょうか?
これが望ましい動作である状況がいくつかあります。たとえば、カートリッジ ベースのゲーム コンソールのゲームでは、通常、メイン ループに終了条件がありません。これは、プログラムが終了するオペレーティング システムがないためです。コンソールの電源がオフになるまでループが実行されます。
もう 1 つの例は、モジュールが別のモジュールからのアクションをリッスンする場合です。常にリッスンする必要があるため、リスナーは無限の時間またはプログラムがオフになるまでリッスンする必要があります。ソケット、スレッド、UIComponents と同様です。
無限ループの概念に悪い慣習はありませんが、意図しない無限ループを作成したり、ループのプログラム制御を失ったりした場合など、それが望まれない場合やシステムの機能を損なう場合は、それを考慮することができます。
無限ループを適切な方法にするには:
for(;;)
またはで明示的にしwhile(true)
ます。式ではトートロジーを避け、シンプルに行いましょう。while(abortRequested)
{
// ....
}
とほぼ同等
while(true)
{
// ...
// ... dozens of lines of code ...
if(abortRequested)
break;
// prepare next iteration
}
あるいは、これは、すべての非デーモン スレッドが完了すると自動的に終了するデーモン スレッドで実行することもできます。したがって、これらの構造の意味は一般的に次のとおりです。
明示的な終了イベントが受信されない限り、デフォルトで永久に実行し続ける必要があります。
一般的には問題ありません。心配する必要はありません。それはプログラマーの好みに関するものです。
私while(true)
の観点からは、よりエレガントな形の無限ループの方が好きです。他の誰かがfor(;;)
アプローチを好むかもしれません。
これは個人的な好みの問題です。たとえば、私はこのスタイルを非常に好みます。
while (true) {
// Do infinite task
}
それはすべて読みやすさにかかっています。読みやすく、数か月後に理解しやすいものを選んでください。
1つの観点は次のとおりです。Whileはイベント/条件ベースに似ています..ループを終了する何かが発生するまでループを実行する場所。一方、 for ループは、ループが何回発生するかを指定するカウンターベースのようなものです。少なくとも、そのための明確な規定があります。
もちろん、技術的にはどちらも同じで、どちらも実行条件をチェックしてループサイクルを開始します。