12
|
polygenelubricants · 技术社区 · 15 年前 |
![]() |
1
11
这是语言中的一个常见习惯用法,其中类型不包括范围检查。“越界”值用于指示多个条件之一。在这里,返回值表示两件事:1)找到字符,2)找到字符的位置。
使用-1
在具有严格范围检查的语言中,例如ADA或Pascal,该方法可以实现为(伪代码)
这将“找到/未找到”标志与位置分开。位置作为out参数提供-本质上是另一个返回值。它也可以是一个输入输出参数,从给定位置开始搜索。此处不允许使用-1来表示未找到,因为它违反了对正类型的范围检查。 Java中的替代方案是:
如
尽管它清楚地分离返回值,但它会受到对象创建开销的影响。其中一些可以通过
顺便说一下,多个返回值将是Java(橡树)的一部分,但是在1之前被切断以释放时间。詹姆斯·高斯林 says 他希望他们被包括在内。它仍然是 wished-for feature . 我的看法是,使用magic值是一种在单个返回值中对多值结果(标志和值)进行编码的实用方法,而不需要过多的对象创建开销。 但是,如果使用magic值,那么如果它们在相关的API调用之间保持一致,就可以更好地使用它们。例如,
Java在这里很短,因为在调用中使用-1。
|
![]() |
2
4
在这种情况下,不是真的。没有什么特别的
不。要符合反模式的条件,这个成语需要有一些有害的东西。我觉得使用没有什么有害的
同上。(可以说,使用命名常量比使用空常量更好)
我不知道。但是,我会注意到这个“设备”在不同的标准类中使用。例如,
就我而言,这只是一个在某些情况下有用的“算法装置”。我相信如果你回顾一下文献,你会看到一些使用
选择
对于返回的方法来说,这可能是一个坏主意
另一方面,如果“条件”由
|
![]() |
3
3
Java和JavaScript的使用
我发现这种方法(在扩展数组类型元素
另一方面,您可以尝试使用php方法,例如 strpos() 但是imho它会变得混乱,因为有多个返回类型(未找到时返回false) |
![]() |
4
2
-1作为一个返回值有点难看,但是必要的。表示“未找到”情况的替代方案是更糟的:
就我个人而言,我从不喜欢引用-1常量:我对“未找到”的测试总是类似于:
|
![]() |
5
1
为定义一个最终类变量是很好的实践 全部的 代码中的常量值。 但一般都接受使用0、1、-1、“”(空字符串)而不进行显式声明。 |
![]() |
6
1
这是从C继承的,只有一个基元值可以返回。在爪哇中,还可以返回单个对象。 因此,对于新代码,返回一个basetype的对象,其子类型指示要与instaceof一起使用的问题,或者引发“未找到”异常。 对于现有的特殊值,使-1相应地成为代码名中的常量-找不到-这样读者就可以不必检查javadocs就知道其含义。 |
![]() |
7
1
与…相同的做法
|
![]() |
8
1
它的使用是因为它是您在基于0的数组中遇到的第一个无效值。正如您所知,并非所有类型都可以包含空值或空值,因此需要“something”来表示空值。 我想说它不是官方的,它只是成为惯例(不成文),因为它对形势非常敏感。就个人而言,我也不认为这是个问题。API的设计也取决于作者,但是 guidelines can be found online . |
![]() |
9
1
据我所知,这些值称为sentinel值,尽管大多数常见的定义与此场景稍有不同。 Java等语言选择不支持通过引用(我认为这是一个好主意),因此当单个参数的值是可变的时,传递给函数的变量仍然不受影响。因此,只能有一个类型的返回值。所以您要做的是选择一个有效类型的无效值,并返回它以传输附加的语义,因为返回值实际上不是操作的返回值,而是一个特殊的信号。
现在我想,最干净的方法是
你可能得到的是一个例外,因为
现在,尽管如此,它还是有两个主要缺陷:
最后,由你来决定。这是一个哲学问题。我将其称为“语义攻击”,以牺牲健壮性来实现短和快。你的电话;
尔兹
|
![]() |
10
1
就像为什么51%意味着公司股东之间的一切,因为它是最接近的,也有意义,而不是-2或-3… |