2

編集:質問が長すぎたため、ほとんどの質問を変更しました。私の質問は事実の要求ですが、意見に基づいていると見なされました。そうは言っても、私がこの質問を閉じることが間違っていた理由を説明しようとするコメントを読んでください。

また、最初の質問でお詫びしたいと思います。私は英語のネイティブ スピーカーではなく、[盲目的に] という言葉にこんなに否定的なトーンがあるとは知りませんでした。私は実際に他の質問でその言葉を使用しました。


背景:

次の C# コードを考えてみましょう。

for(; /*empty condition*/ ;)
{
    //Infinite loop   
}

これは、他の方法の中でも、無限ループを作成するための良い方法と考えられています。しかし、 a で同様のアプローチを試みると、while loop決してコンパイルされません:

while(/*empty condition*/)
{
    //Compiler error
}

最初は、これはコンパイラのバグだと思っていましたが、C# language specification. これはデザインであることがわかりました。なんで?C# は C に基づいており、C はこのように動作するためです。

では、問題は、なぜ C はこのように振る舞うのかということです。他の誰かがすでに StackOverflow でこの質問をしています。答えはかなり満足のいくものではなく、次のようになりました。

C言語仕様にこのように記述されているため、このように動作します。

この答えは、私が子供の頃に両親と何度も話し合ったことを思い出させてくれました。-「そう言うから」. while()さらなる回答は、 「ハッキー」であり、「使用するfor(;;)とより意味がある」と推測します(つまり、ソースや引数は追加されませんでした)。


私の研究

編集:長いと見なされたため削除されました。それは基本的に、C がこの構造を持っている理由を解明するための努力でした。


私の質問:

while loopすべての調査の結果、が空の式を受け入れることができないのは、可能であれば非論理的であると結論付けましたthe for loop

しかし、それが本当なら、なぜ C# 言語設計チームはこの動作を模倣したのでしょうか?

あなた: 「C# は C に基づいているのに、なぜ車輪を再発明するのですか?」

確かにそうですが、なぜ同じ非論理的な決定を下すのでしょうか? あなたのおじいさんが橋から飛び降りるなら、あなたが彼に基づいているという理由だけで、あなたもそうしますか? そして、古い言語に基づく新しい言語の作成は、古い言語の非論理的な落とし穴を回避/修正するための理想的な状況ではないでしょうか?

だから私の質問を繰り返すために:

  • C# 設計チームがこの動作をコピーしたのはなぜですか?
4

2 に答える 2

3

すべての調査の結果、while ループが空の式を受け入れられないことは非論理的であるとしか結論付けられません。

非常に大雑把な結論。IMHOfor(;;)非論理的なのはループです (この点だけではありません)。

それが可能だったことは明らかですwhile() { ... }が、そのメリットは何ですか?
私が好むスタイルの問題としてfor(;true;)for(;;)それは誤解される可能性が少ない.

'for-ever' ループを書けるかどうかは些細な問題ですが、タイプミスを避けることはもっと重要です。
読みやすさだけが重要です。あなたはあまり主張していませんwhile()

そして、この声明で何が起こるべきですか?

 if() Foo(); 
于 2013-08-14T13:37:24.183 に答える