1

終わりのない if-else ステートメントをコードに追加するのにうんざりしたので、何かが正しくない場合に例外をキャッチする方がよいのではないかと考えました。例えば。言う代わりに:

public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
    if(word != null) {
        if(array.length > 0) {
            return word.equalsIgnoreCase(array[0]);
        }
    }
    return false;
}

私はちょうど持っているだろう:

public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
    try {
        return word.equals(array[0]);
    } catch(/*NullPointerException or an ArrayIndexOutOfBoundsException*/ Exception e) {
        return false;
    }
}

ifステートメントで複数の引数を使用できることは知っていますが、実際にはどの方法を使用する方が良いか、そしてその理由に興味があることに注意してください。

前もって感謝します!

4

5 に答える 5

6

No, thats not a good idea, thats an abuse of Exception handling.

You are meant to avoid unnecesary exception catching, exceptions should only be used for things that go wrong because they are outside of your control and not as part of the normal program flow. Also, as @SJuan76 said you'll be hiding situations where there is a real Exception.

If you are tired of using if-else statements, you can try using a switch(which will even work for strings in Java 7) or improve polymorphism in your application.

于 2013-05-17T00:06:22.733 に答える
4

一般的なルールは、「例外的なイベントには例外を使用し、制御フローには使用しない」です。

だから使ってif(...) else ...ください。

于 2013-05-17T00:08:37.037 に答える
3

まず、IIRC の正しく例外処理が遅いです。それほど遅くはありませんが、主流のロジックで使用したいものは何もありません。

第二に、そのように作業することで、実際の例外がある状況を隠すことができます。ユーザーはファイルをロードしようとしますが、ファイルがロードされていないことだけがわかり、ファイルが見つからなかったり、データが破損していたり​​しても何もわかりません。多くの情報を失います。

コードをよりシンプルにしたい場合は、次のようにすることをお勧めします

/**
 * ....
 * @param word String must not be null.
 * @param array String[] must not be null, have length at least 1, an array[0] must not be null
 */
public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
  return word.equals(array[0]);
}

少なくとも、パラメーターをサニタイズする責任を、メソッドを使用するコードに委任します。賢明なことではなく (防御的プログラミングに反します)、同僚はあなたのコードを操作することを嫌いますが、最初のアプローチよりはましです。

于 2013-05-17T00:12:33.113 に答える
0

例外アプローチはお勧めできません。例外のスロー 1. 遅い 2. アプリケーションが読めなくなる。@greedybuddhaが言ったように、「例外的なイベントには例外を使用し、制御フローには使用しないでください」。

于 2013-05-17T01:01:33.150 に答える
0
do {
    if (conditionA) {
        something;
    }
    else {
        break;
    }
    if (conditionB) {
        somethingElse;
    }
    else {
        break;
    }
    ...
} while(false);
于 2013-05-17T00:16:48.640 に答える