我听过故事的两端。一种观点是使用数值变量的特殊值来表示特殊状态是设计缺陷。但是,我一直都会遇到这种情况。
一个例子是字节无符号整数,其中值255表示缺少信息。
这是一种不好的做法吗?如果是这样,在什么特殊情况下允许/鼓励?
答案 0 :(得分:1)
这在很大程度上取决于情况;一如既往,努力把事情写成最简单,最容易理解的方式。希望特殊情况处理不会使正常情况下的代码混乱(这是异常背后的想法,但它们会造成自己的混乱......)。
选择用于特殊情况的值时要小心。例如,C / Unix约定使用了这一点,但请确保使用“不可能”的值。因此,getchar(3)
将字符代码作为int
返回,但会为文件末尾返回非字符EOF
。类似地,read(2)
返回读取的字符数(如果没有要读取,则可以为0),或者出错时为-1。
答案 1 :(得分:0)
这绝对不是不是一种不好的做法,假设你可以负担得起,即可表示整数的范围有足够的额外值,你永远不需要在现实生活中使用。
例如,如果你需要一系列无符号字节,包括255,那么给255一个新的含义" unknown"会是个问题。如果255从未用于"真实"数据,然后您可以随意分配任何您想要的含义。
然而,错误的是在整个代码中使用特殊数字而没有为它们指定特殊名称。例如,
if (myByte == 255) {
// Process the situation when the value is unknown
}
毫无疑问是坏事。您应该命名所有特殊常量,并在整个代码中仅使用这些名称:
if (myByte == UNKNOWN_VALUE) {
// You can skip the comment about processing an unknown value:
// the name of the constant tells your readers what's going on.
}