編集:質問が長すぎたため、ほとんどの質問を変更しました。私の質問は事実の要求ですが、意見に基づいていると見なされました。そうは言っても、私がこの質問を閉じることが間違っていた理由を説明しようとするコメントを読んでください。
また、最初の質問でお詫びしたいと思います。私は英語のネイティブ スピーカーではなく、[盲目的に] という言葉にこんなに否定的なトーンがあるとは知りませんでした。私は実際に他の質問でその言葉を使用しました。
背景:
次の 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# 設計チームがこの動作をコピーしたのはなぜですか?