teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ご・き・て・い・せ・い

2017/11/23 16:34

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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

誤記訂正

2017/11/23 16:34

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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