エラー処理の標準的な方法がない大きな解決策があります。最近、try/finally ブロックを持つ多くのメソッドを見つけました。キャッチブロックなし。このようなもののすべての出現をどのように見つけましたか?
1 に答える
try
必ずしもブロックがエラーをスローできることを意味するわけではありません。怠惰なプログラマーにとっては、構文糖衣になることもあります。
例:
値を変更したいreturn
場合は、その値を変更します。これは次のように記述できます。
public int Foo () {
int old = this.value;
this.value = 5;
return old;
}
しかし、より便利な方法は次のとおりです。
public int Foo () {
try {
return this.value;
} finally {
this.value = 5;
}
}
2 番目の実装の方が長いと主張することもできますが、一般的にはそうではありません。old
さらに、値を明示的に保存することを防ぎます。2 番目の実装は、プログラマーの意図が記述されているため、より読みやすく、エラーが発生しにくくなっています。
try
これにより、おそらく最初に意図されたよりもキーワードがあいまいになると主張できます。より良いキーワードがおそらくより適切でした...
私の知る限り、try
ブロックのないcatch
ブロックを簡単にチェックする方法はありません。a がほとんどのインスタンスRegex
を見つけることを期待できます (たとえば、 を使用しますが、 orブロックに追加のスコープがあると言うと、はこれを検出しません。おそらく最も簡単なのは、C#/Vb.Net のコンテキストフリー文法をコピーすることです)。//ブロックの構築時に、ブロックが含まれていない場合に備えて、適切なチェックと出力を行います。@"try\d*{[^}]*}\d*finally\d{[^}]*}
try
finally
Regex
try
catch
finally
catch