回答編集履歴
2
ご・き・て・い・せ・い
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
そのとおりです。本件のような場合、「人間がそれをみれば i==1のときに、必ずaに何かの値が代入される」ということはわかりますが、これを一般化した場合コンパイラーが「変数へ値が必ず代入されるかどうか」を判断することは大変難しい問題なのです。
|
4
4
|
|
5
|
-
言語の仕様というのは「概ねチェックします」というような曖昧なものは許されません。大抵は一回読んでもすぐに理解できないくらいややこしく厳密な定義がなされています。その定義に従う
|
5
|
+
言語の仕様というのは「概ねチェックします」というような曖昧なものは許されません。大抵は一回読んでもすぐに理解できないくらいややこしく厳密な定義がなされています。その定義に従うと「このようなケースは未設定の可能性があると見做す」という仕様になっていると考えてください。
|
6
6
|
|
7
7
|
---
|
8
8
|
ちなみに本件と同様の仕様をJava言語仕様書で読んだことがあります。最初何言ってるか分かりませんでしたが、よーく読むと分かりましたw;
|
1
誤記訂正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> コンパイル時にはループが実行されるわけではないので、aに値が代入されないまま、Console.WriteLine(a);が呼ばれてしまって、このエラーが出ているのではないかと思うのですが...
|
2
2
|
|
3
|
-
そのとおりです。本件のような場合、「人間がそれをみれば i==1のときに、必ずaに何かの値が代入される」ということはわかりますが、これを一般化した場合コンパイラーが「
|
3
|
+
そのとおりです。本件のような場合、「人間がそれをみれば i==1のときに、必ずaに何かの値が代入される」ということはわかりますが、これを一般化した場合コンパイラーが「変数へ値が必ず代入されるかどうか」を判断することは大変難しい問題なのです。
|
4
4
|
|
5
5
|
言語の仕様というのは「概ねチェックします」というような曖昧なものは許されません。大抵は一回読んでもすぐに理解できないくらいややこしく厳密な定義がなされています。その定義に従うい「このようなケースは未設定の可能性があると見做す」という仕様になっていると考えてください。
|
6
6
|
|