これでコンパイルエラーにならない方もアレなんですけど。
if (hoge == null) {
// HogeHoge
} else if (hoge != null) {
// FugaFuga
} else {
// WTF
}
Java問わず、これをエラーと検知してくれるコンパイラってあるんだろうか。
まぁ eclipse とか何らかの IDE 使ってれば「このブロック入らんぜ ?」って警告出してくれるんだけどな。テキストエディタでベタ打ちしてたら…気づけよw
null or not null程度なら、ある程度「パターンマッチ」で拾える世界だけれど、
if - elif - ... の羅列からデッドコードを「まじめに」検出しようとすると、 命題論理やら集合論に基づく解析を力いっぱいぶん回すことになるわけです。
例えば、以下のようなコード。
if (n > 0) {
System.out.println("I'm positive.");
} else if (n < 0) {
System.out.println("I'm negative.");
} else if (n == 0) {
System.out.println("I'm zero.");
} else {
System.out.println("I'm dead.");
}
↑の場合、最後のelseがデッドなことは、理論上静的解析のみで判別できるわけですが、 これを本当に検出してくれるコンパイラやコード検査ツールの類が、果たして世の中にある かなぁ、と。
もしあったとして、それは本当に嬉しいのだろうか、っていう視点もありんすね。 コンパイルよりも、むしろ検出に割くCPUリソースのほうが多くなっちゃったりしたら。。
C#+VisualStudioなら絶対に到達できないコードがあると 警告なり注意なり出てくる。
InternalServerE さんの 2012-09-05 21:46:10 のだけど、nがNaNだったら…なんてことを考えてしまった。
コンパイラはロジックのエラーは関知しないからな仕方ない。