回答:
それはほとんど役に立たないですが、それが必要ないくつかの場所があります。例えば:
while (DoSomething());
これにより、DoSomething()
falseが返されるまでメソッドが実行されます。明らかにこれは、メソッドがいくつかの有用な副作用も実行することを前提としています。ただし、空のステートメント、つまり末尾のセミコロンが必要です。それ以外の場合、whileループには次の次のステートメントが代わりに含まれます。
(ただし、他の回答と矛盾するのfor(;;) {}
は、空のステートメントの例ではありません。for句の後の括弧にはステートメントが含まれていないため、セミコロンを使用して(オプションの)式を区切ります。詳細については、Java文法を参照してください。)
文が構文的に必要であるが意味的には必要でない場合に使用できます。最も一般的なケースは、この例のようにforループの一部を省略することですが、ほとんどの人はその使用法が奇妙で読みにくいと感じています。あなたの本が言うように、それはめったに使われません。
while ( sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { ; }
ます。もちろん、すべて別の行にあります。と書くこともできましたがwhile ( true ) { if ( ! sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { break; } }
、それは間違いです。
void method(){ //code here. If(condition){return ;}}
。
私はwhileループの使用を好みますが、null式を使用すると次のように記述できます。
for (;;) { thread.run(); }
ただし、nullステートメントで次のように記述できます。
while(true);
{
thread.run();
}
その主な目的は、あなたの後に来て、なぜスレッドが実行されていないのか疑問に思っている貧しい保守プログラマーの時間を無駄にすることです。ステートメントはしばらく続く必要があります。孤独; ステートメントです。したがって、このステートメントブロックは実際にはループの一部ではありません。
それは良い利用法がないと言うことではありません。それらはまれです。通常は次のようになります。
{
;
}
この方法では、そうすることを意図しているように見えます(これで十分でない場合もあります)。
アセンブリでは、このnullステートメントはNOPと呼ばれます。Pythonでは、これをパスと呼びます。java(およびcの他の子)では、あなたが言ったようにセミコロンです。
私はいくつかの用途を知っています:
セマンティック。
空のスペースと答えとしてゼロを置くことの間には違いがあります。はっきり言って、ここに何かを置くのを忘れなかった。これは何も意味がない。それは明白なものではありません。このスペースは意図的に空白にされています。これは、N / Aをコンパイルする方法です。
ヌルパターン
コンベヤーベルトから色付きの電球を繰り返しピックアップし、ソケットにねじ込み、電源を入れ、取り外し、次の電球をピックアップする複雑で高価な光信号機を想像してみてください。ベルトに付けた球根の色によって、このことのシグナルを制御できます。すばらしい、これで問題なく動作するようになったので、上司はこれらの信号のタイミングを制御する方法を作成するように求めています。メッセージ間のギャップを追加したいと考えています。多くの部分がこれらの信号のタイミングと、それらを同期させるのがどんなに大変かについて気にかけていることを恐怖で覚えています。これを行わずに週末に仕事を続けるために、どのようにタイミングを制御しますか?あなたは燃え尽きた電球のビンを見て、文字通りではありませんが、明るいアイデアを得ます。
ポリモーフィズムを使用して、何も壊さずに何かをオフにするだけの場合もあります。
デバッグ中
ブレークポイントを設定するときは、ブレークポイントを配置する場所が必要です。これで、一部のデバッガーで右中かっこに設定できるようになりましたが、そうでない場合は、その場所で何も実行しない場合でも、場所を強制的に配置できるようにすると便利です。
実際にはJavaのものではありませんが、次のものもあります。
バイナリいじり
アセンブリのNOP命令により、コンパイルされたバイナリ実行可能ファイルをいじることができます。しかし、最近のJavaコンパイラーは最適化を大幅に離れているため、セミコロンがうまく機能しないのではないかと思います。しかし、昔は実行可能ファイルでこれらの空のスポットを使用して、タイミングを制御したり、後でフックをドロップしたりすることもできました。NOPがない場合、実際の命令がそこにあるので、フックしたい場合は、フック用のスペースを空けるために、それらの命令を別の場所にコピーする必要があります。これは、Javaが構文の多くを取得するC言語でも同様に機能します。しかし、私はこのフックをいじくるのはJavaではあまり起こらないと思います。そのためにアスペクト指向プログラミングを使用します。
for
はnullステートメントではありません。Nullステートメント(空のステートメント)は他のステートメント(など)が発生する場所と同じ場所に発生する可能性がif
ありますが、次の括弧for
はセミコロン間のステートメントを許可しませんが、オプションである初期化子と2つの式のみを許可します。したがって、セミコロンの使用方法は、文末記号とは異なります。空のステートメントは、最後のセミコロンになりますfor(;;);
Javaは人間の言語と一致しない方法で設計されているので、私はそれを使用します。Cにも同じことが言えます。
ステートメントはstatement;
です。
if-then-elseステートメントは if (condition) statement; else statement;
複合ブロックを含むif-then-elseステートメントは if (condition) {statements} else {statements}
これは明らかにナンセンスです。
したがって、私if (condition) {statements} else {statements};
はどちらが論理的で合理的であるかを書きます。
Javaの設計者がこれをif-then-elseの後にnullステートメントが続くものとして扱いたい場合は、問題ありません。それが彼らを幸せにするなら、それを彼らを幸せにする。
if (condition) {statements;} else {statements;}
。また、Javaは;
の後のsを必要としないことについてかなり一貫してい}
ます。人間の言語が、疑問符で既に終了している文の終わりにピリオドを付けないことがよくあるようなものです。(確かに、!?
またはで?!
終わりますが、それらは‽
、インターロバン文字の単なる近似値です。)