测试 indexOf 返回值的最佳做法
Best practice for testing return value of indexOf
当你测试indexOf的返回值时,你通常会写什么?
if str.indexOf("a") < 0
与
if str.indexOf("a") == -1
一种方法会优于另一种方法吗?
我实际上是为任何语言中在错误时返回 -1 的任何函数提出这个问题。
我通常更喜欢 <0 方法,因为如果函数在其他情况下扩展为返回 -2,代码仍然可以工作。
但是,我注意到 == -1 方法更常用。有什么原因吗?
我尝试实现"错误条件"测试应尽可能广泛的一般原则。 因此,我会使用< 0
而不是== -1
。
这是我在攻读计算机科学学位期间在正式方法课上学到的原则。
在简单的if
上,这并不重要,但在循环中,检测任何"超出范围"的情况以确保环路被终止非常重要,而不是假设环路终止值将被准确命中。
举个例子:
i = 0;
while (i < 10) {
++i;
// something else increments i
}
VS
i = 0;
while (i != 10) {
++i;
// something else increments i
}
后一种情况可能会失败 - 前一种情况不会。
我也更喜欢<0方法。根据 Java 文档,== -1 方法被广泛使用的原因是,如果缺少索引,函数确实会返回 -1,并且"扩展函数"的情况永远不会发生。
在几乎所有情况下,建议尽可能紧密地坚持使用 Java 文档。请参阅 Java 文档:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28int%29
。根据它:-1将被返回。
所以我总是会检查 -1。 如果要检查特定值,则检查该特定值会更安全,以防止将来在 Java API 中进行代码更改。
例如,如果你得到一个-2,这意味着你的JVM中出现了严重的错误。这并不意味着"未找到"。代码最好继续并导致异常/错误。
根据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
,那可能意味着我有一些问题。检查您的期望比检查您可能期望的内容要好。
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 有条件更新d3.js力图中节点的最佳方法
- 为react组件传递道具的最佳方式
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 让Webpack管理Quirky AMD定义的最佳方式
- 为什么indexOf在这个js代码中不起作用
- 在承诺链中处理早期回报的最佳方式
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- Angularjs 1.5.x本地化最佳实践
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- MobileFirst:在客户端运行计时器作业-最佳选项
- Angularjs通过过滤器获取indexOf
- 在ng重复循环中显示条件内容的最佳方式是什么
- indexOf具有2个参数
- 在phonegap中为android调用onload函数的最佳方式
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 从数组中删除元素的最佳方法是:javascript/jquery
- 测试 indexOf 返回值的最佳做法
- indexOf在找到匹配的第一个字符串后停止,但我希望它找到匹配的最佳字符串