2012-04-01 10 views
1

これは、オープンソースのJavaテンプレートプロジェクトで見つけたコードスニペットです。これは天才的なものか、単純な悪いコードですか?

誰かがこの構成が良いかもしれないという手がかりを持っていますか?

final public Expression Expression() throws ParseException { 
    Expression exp; 
    exp = OrExpression(); 
     {if (true) return exp;} 
    throw new Error("Missing return statement in function"); 
    } 
+4

'OrExpression();を返すまったく旋回した方法です。 – assylias

+0

は' throw new Error() 'に到達できませんか? –

+0

@assylias:まさにそれが私の考えです。私はちょうどなぜプログラマーがこの方法で彼/彼女のコードを書いているのだろうかと思っています。 – uthomas

答えて

3

これはコードです。実際の効果は単にreturn OrExpression();です。

私はこのようなコードを受け入れる1つの言い訳があります:同様のパターンに従うが、ここで役に立たないビットは役に立たないように、より複雑で、それのような他の方法、がたくさんあります。しかしこれは少しの極端な例です。

の場合、throw new Error("Missing return statement in function");はほとんど言い訳がありません。 Javaコンパイラはを返します。戻り値の型がvoidではなく、最後に到達するコードパスがあります(return,、または無限ループを入力しません)。意図はをコンパイルする許可不完全なコードにした場合、これは良いでしょう唯一の理由はある - すなわち、実行時に失敗するのではなく、コードの他の部分を使用したり、テストすることができるように時間をコンパイル - それでもそれを適用しますすべての方法に悪い考えです。

1

これはJavaCCから自動的に生成されたコードです。

+0

うーん、それは理にかなっている。 – uthomas

関連する問題