测试indexOf返回值的最佳实践

时间:2012-04-16 14:14:59

标签: java javascript

当您测试indexOf的返回值时,您通常会写什么?

if str.indexOf("a") < 0 

VS

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

一种方法比另一种方法更受欢迎吗?

我实际上是针对任何语言中的任何函数提出此问题,该函数在出错时返回-1。

我通常更喜欢&lt; 0方法,因为如果函数扩展为在某些其他情况下返回-2,代码仍然可以工作。

但是,我注意到== -1方法更常用。有原因吗?

6 个答案:

答案 0 :(得分:3)

我尝试实现一般原则,即“错误条件”的测试应该尽可能宽。因此,我会使用< 0而不是== -1

这是我在CS学位期间在正式方法课程中教授的原则。

在一个简单的if上它并不重要,但在循环中,检测任何“超出范围”条件以确保循环终止并且不假设循环终止值很重要将完全被击中。

以此为例:

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

v.s。

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

后一种情况可能会失败 - 前一种情况不会。

答案 1 :(得分:2)

我也更喜欢&lt; 0方法。 == -1方法被广泛使用的原因是,根据Java文档,如果缺少索引并且“扩展函数”的情况永远不会发生,函数确实会返回-1。

答案 2 :(得分:1)

几乎在所有情况下都建议尽可能地坚持使用Java doc。 请参阅Java Doc: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

...根据它:-1将被返回。

所以我总是检查-1。如果您要检查特定值,则检查该特定值会更安全,以防止java api中的未来代码更改。

例如,如果你得到-2,这意味着你的JVM中的某些东西是严重错误的。这并不意味着“没有找到”。代码进行并导致异常/错误会更好。

答案 3 :(得分:0)

根据javadoc,如果字符不按顺序发生,则始终应该返回-1 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29

答案 4 :(得分:0)

正如Sandeep Nair指出javaDoc解释的那样,但我想稍微评论一下。

两者都可以正常工作,我不会说一个比另一个更“好”。许多人写== -1的原因是,如果“无法找到东西”,搜索方法会返回-1,这是一个普遍的约定。我们不能使用0,因为它们被用作数组等中的索引。

所以,这是一个意见问题。只要惯例保留,就没关系。

答案 5 :(得分:0)

我之所以使用-1只是因为我想检查一下我的期望。

我不期待-2。如果我得到-2,那可能意味着我有一些问题。检查您期望的内容比检查可能期望的内容更好。