8

indexOf の戻り値をテストするとき、通常は何を記述しますか?

if str.indexOf("a") < 0 

if str.indexOf("a") == -1

ある方法が他の方法よりも優先されますか?

私は実際に、エラー時に -1 を返す任意の言語の任意の関数に対してこの質問を投げかけています。

私は通常 < 0 のアプローチを好みます。なぜなら、関数が拡張されて他のケースで -2 を返す場合でも、コードは機能するからです。

ただし、== -1 アプローチがより一般的に使用されていることに気付きました。理由はありますか?

4

6 に答える 6

4

「エラー状態」のテストはできるだけ広く行うべきであるという一般原則を実装しようとしています。したがって、< 0ではなくを使用します== -1

これは、CS の学位を取得しているときに、フォーマル メソッドのクラスで教えられた原則です。

単純なif場合はそれほど重要ではありませんが、ループでは「範囲外」の状態を検出してループが終了したことを確認し、ループ終了値が正確にヒットすると想定しないことが重要です。

たとえば、次のようにします。

i = 0;
while (i < 10) {
    ++i;
    // something else increments i
}

i = 0;
while (i != 10) {
    ++i;
    // something else increments i
}

後者のケースは失敗する可能性がありますが、前者のケースは失敗しません。

于 2012-04-16T14:17:41.073 に答える
2

私も <0 アプローチを好むでしょう。== -1 アプローチが広く使用されている理由は、Java ドキュメントによると、インデックスが欠落している場合に関数が実際に -1 を返し、「拡張関数」のケースが発生しないためです。

于 2012-04-16T14:18:29.500 に答える
1

ほとんどの場合、Java doc にできる限り厳密に準拠することをお勧めします。Java ドキュメントを参照してください: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

...それによると:-1が返されます。

だから私は常に-1をチェックします。チェックする特定の値がある場合は、Java API の将来のコード変更から保護するために、その特定の値をチェックする方が安全です。

たとえば、-2 が返された場合、それは JVM に深刻な問題があることを意味します。「見つからない」という意味ではありません。コードが先に進み、例外/エラーを発生させる方がよいでしょう。

于 2012-04-16T14:20:34.017 に答える
0

javadoc indexOf によると、文字が連続して発生しない場合、常に -1 を返すことになっています http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

于 2012-04-16T14:19:07.467 に答える
0

Sandeep Nair が指摘するように、javaDoc で説明されていますが、少しコメントしたいと思います。

どちらも問題なく動作し、一方が他方よりも「優れている」とは言えません。多くの人が書い== -1ている理由は、「ものが見つからない」場合、検索メソッドは -1 を返すという一般的な規則があるためです。配列などのインデックスとして使用されるため、0 は使用できません。

だから、それは意見の問題です。コンベンションが続く限り、それは問題ではありません。

于 2012-04-16T14:20:59.553 に答える
0

-1私が期待していることを確認したいという理由だけで使用します。

私は期待していません-2。私が得た場合-2、それはおそらく私がいくつかの問題を抱えていることを意味します. 期待していることを確認することは、期待できることを確認することよりも優れています。

于 2012-04-16T14:21:17.443 に答える