Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coding style 使用-1表示无效值的替代方法_Coding Style - Fatal编程技术网

Coding style 使用-1表示无效值的替代方法

Coding style 使用-1表示无效值的替代方法,coding-style,Coding Style,我在这里读的是失眠症游戏的编码标准:其中提到不要使用“魔法值”。我说的不是用命名常数替换的幻数 换句话说,不要用-1来表示“无效”或“未设置”。但它并没有告诉你什么是更好的练习。你们是干什么的?你怎么能不检查它就相信valid实际上是有效的呢?我能想到的唯一一件事是,有一个bool来指示它是有效的还是无效的,但这似乎很草率。您可以使用枚举来返回一个更好、更有意义的值枚举实际上只是给出数字的名称 enum Errors { NO_DATA_RECIEVED COMPUTER_ON_

我在这里读的是失眠症游戏的编码标准:其中提到不要使用“魔法值”。我说的不是用命名常数替换的幻数


换句话说,不要用-1来表示“无效”或“未设置”。但它并没有告诉你什么是更好的练习。你们是干什么的?你怎么能不检查它就相信valid实际上是有效的呢?我能想到的唯一一件事是,有一个bool来指示它是有效的还是无效的,但这似乎很草率。

您可以使用
枚举来返回一个更好、更有意义的值<代码>枚举
实际上只是给出数字的名称

enum Errors {
    NO_DATA_RECIEVED
    COMPUTER_ON_FIRE
    WIFI_OFF
}
你会像这样使用它:

throw COMPUTER_ON_FIRE;
在错误处理程序中:

if(error == COMPUTER_ON_FIRE)
     displayDialog("Grab a fire extinguisher!");

对程序员来说,这比返回-1要有用得多。现在你知道问题的实质了。

事实上,如果你阅读下一段,他们会告诉你他们认为更好的做法:

对于具有离散枚举值的对象,如ID,可以将sentinel指定为“invalid”,但请将其设置为显式常量。例如,旧动态关节代码中DYN_JOINT_ID_invalid(0xffffffff)的are编码是sentinel值的适当使用


根据具体情况,返回一个唯一的错误代码是否比返回一个负值更可取,这是一个有争议的习惯用法。他们甚至没有提到的例外情况可能是更好的选择。但从理论上讲,什么可能是最好的选择是完全不相关的:他们已经做出了决定,大概是出于很好的理由,并将其放入了他们的编码标准中,这是你不得不接受的。

我的想法就像数组中的索引一样-1表示“未设置”。我认为,在这种情况下,使用枚举是行不通的。我想我可以设置一个枚举值为-1…当然可以。如果枚举为null,则从未对其进行处理或设置。您可以在一个try块中检查枚举,或者在检查它之前测试它是否为空,哪一个效果更好。您的
enum
中缺少逗号,并且您没有对函数成功时发生的情况做任何准备:返回值的选择都指示错误。也没有任何迹象表明这样一个总是返回成功/失败指示器的函数应该或将如何将其计算出的任何值传递给调用方。@Emmet在您的第一点上-它是psudeocode,所以这真的不重要。但是,关于你的第二点,我同意。它应该抛出错误,而不是返回错误。我编辑了答案。在返回值的上下文中,我并不真正关心这个问题。我最关心的是需要使用的成员变量没有设置为有效值。不过我明白这一点。可以我想我是智障。在标准文档的前面,他们提到他们不使用异常。谢谢。我想我的困惑是,我没有想到将一个变量设置为一个命名的幻数来表示一个无效的值。我通常只是在代码中使用它们来代替文字,以便于使用和可读性。老实说,我不认为这是一个经过深思熟虑或编写良好的编码标准(我摘录的段落甚至没有经过很好的校对)。对于通常返回非负整数的函数,使用-1作为错误返回是一个公认的习惯用法,它可以通过我书中的“无幻数”规则。偏好可能有很好的技术原因,但在这种情况下,这似乎是他们的任意偏好。