定义0和1的常量

时间:2009-12-18 02:31:07

标签: magic-numbers

我想知道其他人是否认为做这样的事情是多余的......

const double RESET_TIME = 0.0;
timeSinceWhatever = RESET_TIME;

而不仅仅是

timeSinceWhatever = 0.0;

您是否找到了第一个帮助提高可读性的示例?该论点归结为使用幻数,而0和1被认为是规则的“例外”,我总是认为这些异常仅适用于初始化变量或索引访问。当数字有意义时,它应该附加一个变量的含义。

我想知道这个假设是否有效,或者只是为了赋予0一个命名常数是多余的。

8 个答案:

答案 0 :(得分:7)

嗯,在你的特定例子中,使用常量没有多大意义。

但是,例如,如果RESET_TIME在将来发生变化的可能性很小(并且变成,比方说,1)那么你肯定应该使用常量。

如果你的意图不明显,你也应该使用常数。但在您的特定示例中,我认为timeSinceWhatever = 0;timeSinceWhatever = RESET_TIME更清晰。

答案 1 :(得分:3)

通常,定义常量而不是仅使用文字的一个好处是,值是否需要同时在多个位置进行更改。

从你自己的例子来看,如果由于一些模糊的新业务规则,REST_TIME需要为-1.5怎么办?您可以将其更改为一个位置,常量的定义,或者您可以在上次使用0.0作为浮点字面值的任何位置更改它。

简而言之,定义常量一般主要有助于维护。

答案 2 :(得分:2)

如果你想更具体,让其他人知道你为什么要改变做你正在做的事情,你可能想要创建一个函数(如果你的语言允许函数浮动),例如

timeSinceWhenever = ResetStopWatch();

或者更好的是,当处理单位时,要么找到一个内置函数类型的库,要么创建自己的函数类型。我不建议随着时间的推移创建自己的,因为有大量的这样的库。我之前在代码中看到过它,如果它有帮助:

Temperature groundTemp = Temperature.AbsoluteZero();

这是指示正在发生的事情的好方法。

答案 3 :(得分:1)

我只有在RESET_TIME可能与0.0不同的情况下才会定义它,这样您就可以进行一次更改并更新所有引用。否则0.0是我眼睛的最佳选择,因此您无需追溯并查看RESET_TIME定义的内容。

答案 4 :(得分:1)

常量是优选的,因为它允许使用可在后续版本的代码中更改的值。并不总是可以使用常量,特别是如果您使用OO语言进行编程,并且无法定义不包含基本数据类型的常量。通常,编程语言总是有一种方法来定义不可修改的对象/数据类型。

答案 5 :(得分:0)

假设RESET_TIME经常在您的代码中使用,并且您想要更改该值,最好一次执行而不是在每个语句中执行。

答案 6 :(得分:0)

优于常量,使其成为配置变量,并将其设置为默认值。但是,是的,RESET_TIME更具可读性,前提是它不止一次使用,否则只需使用代码注释。

答案 7 :(得分:-1)

该代码没问题。 const变量是不可更改的变量。因此,无论何时你想重置一些东西,你都可以让你的const去做那件事