测试indexOf返回值的最佳实践
在测试indexOf的返回值时,您通常会写什么?
if str.indexOf("a") < 0
VS
if str.indexOf("a") == -1
一种方法比另一种方法更受欢迎吗?
我实际上是为任何语言中的任何函数提出这个问题,在错误时返回-1。
我通常更喜欢<0方法,因为如果函数扩展为在某些其他情况下返回-2,代码仍然可以工作。
但是,我注意到== -1方法更常用。 有原因吗?
我尝试实现一般原则,即“错误条件”的测试应该尽可能宽。 因此我会使用< 0
而不是== -1
。
这是我在CS学位期间在正式方法课程中教授的原则。
一个简单的if
它没关系太多,但是在循环中,检测任何“超出范围”条件以确保循环终止是重要的,而不是假设循环终止值将被精确命中。
以此为例:
i = 0; while (i < 10) { ++i; // something else increments i }
VS
i = 0; while (i != 10) { ++i; // something else increments i }
后一种情况可能会失败 - 前一种情况不会。
我也更喜欢<0方法。 == -1方法被广泛使用的原因是,根据Java文档,如果缺少索引并且“扩展函数”的情况永远不会发生,函数确实会返回-1。
在几乎所有情况下都建议尽可能地坚持使用Java文档。 请参阅Java Doc: http : //docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29
……根据它:-1将被退回。
所以我总是检查-1。 如果要检查特定值,则检查该特定值会更安全,以防止java api中的未来代码更改。
例如,如果你得到-2,这意味着你的JVM中的某些东西是严重错误的。 这并不意味着“没有找到”。 代码进行并导致exception/错误会更好。
根据javadoc indexOf总是应该返回-1,如果字符没有按顺序出现http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29
正如Sandeep Nair指出javaDoc解释的那样,但我想稍微评论一下。
两者都可以正常工作,我不会说一个比另一个“更好”。 很多人写== -1
的原因是,如果“无法找到东西”,搜索方法会返回-1,这是一般惯例。 我们不能使用0,因为它们被用作数组等中的索引。
所以,这是一个意见问题。 只要公约保持不变,就没关系了。
我之所以使用-1
只是因为我想检查一下我的期望。
我不期待-2
。 如果我得到-2
,那可能意味着我有一些问题。 检查你期望的东西比检查你的期望更好。