2012-04-16 9 views
7

indexOfの戻り値をテストするときに普通何を書いていますか?indexOfの戻り値をテストするためのベストプラクティス

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

if str.indexOf("a") < 0 

う一つの方法は、他よりも好ましいですか?

実際には、エラーが発生した場合-1を返す任意の言語の関数に対して、この質問があります。

私は通常、<というアプローチを好んでいます。なぜなら、その関数が他の場合に-2を返すように拡張されていても、コードは引き続き機能するからです。

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

+1

Javaの場合、indexOfは文字列に一致するものが見つからない場合は-1を返します。したがって、それを変更することはAPIの中断であり、したがって、-1を返すという事実に数えることができます。しかし、私は '== - 1' –

+0

' if(!〜str.indexOf( "a")) 'に比べて' <0'も少し冗長である方が好きです。 –

答えて

3

"エラー条件"のテストが可能な限り広いべきであるという一般原則を実装しようとします。したがって、== -1ではなく< 0を使用します。

これは私がCSの学位期間中の正式な方法で授業中に教えた原則です。

簡潔に言えば、それほど問題にはなりませんが、ループ上では、ループが終了することを保証するために「範囲外」状態を検出し、ループ終了値がヒットすると想定しないことが重要です正確に。この例の

テイク:

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

v.s.

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

前者の場合は失敗する可能性があります。

+0

しかし、この場合、Java APIは、-1が返されることを具体的に示しています。 – rk2010

+0

ですが、成功すると0以上の整数値が返されることは暗黙のため、反対の(つまり、<0)は完全に有効なカウンタテストです。 – Alnitak

+0

-2が返された場合、「見つからない」という意味ではありません。それは未定義です。むしろ、コードが進んでNullPointerや何らかのエラーが起きると思いますか?そうすれば、少なくともJVMの問題を明らかにすることができます。 – rk2010

2

私はまた、<アプローチを好むでしょう。 == -1のアプローチが広く使われているのは、Javaのドキュメントによると、インデックスが見つからず、 "拡張された関数"の場合が決して起こらない場合に関数が実際に-1を返すからです。

1

を発生していない場合は想定しています。 Java文書を参照: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

...それに応じて:-1が返されます。

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

たとえば、-2を取得した場合、JVMで何かが重大に間違っていることを意味します。それは「見つからない」という意味ではありません。コードが進んで例外/エラーを引き起こす方が良いでしょう。

0

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

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

したがって、意見の問題です。大会が開催されている限り、問題はありません。

0

-1私が期待していることを確認したいからです。

私は期待していません-2です。もし私が-2を受け取ったら、それはおそらく私にいくつかの問題があることを意味するでしょう。あなたが期待していることを確認することは、あなたが何を確認するよりもちょうど良いです。が期待できます。

関連する問題