-3

エラー処理の標準的な方法がない大きな解決策があります。最近、try/finally ブロックを持つ多くのメソッドを見つけました。キャッチブロックなし。このようなもののすべての出現をどのように見つけましたか?

4

1 に答える 1

2

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{[^}]*}tryfinallyRegextrycatchfinallycatch

于 2014-09-22T18:59:02.113 に答える