为什么使用常量被认为比使用文字更好的编程风格?

Oğu*_*dar 4 c coding-style

为什么使用常量被认为比使用文字更好的编程风格?先验优于后者的确切优势是什么?

pax*_*blo 14

一个原因是协助维护.假设你陷入了黑暗时代,你的图形操作程序只适用于1.4M软盘.

你得到了处理新奇的2.8M软盘的请求,你想你自己"哈,我只需要搜索代码寻找1440并用2880代替它.简单,嗯?".

不幸的是,作为一个图形程序,1440也是一英寸的缇数,所以你发现在进行大规模的全局搜索和替换之后,你不仅可以处理更大的磁盘,而且所有的图像在屏幕上都是错误的大小.D'哦!

现在,你必须回去,并找出其中那些1440丝线的磁盘大小,哪些影像尺寸.

如果你刚刚开发了这样的代码:

#define TWIPS_PER_INCH 1440
#define DISK_SZ 1440
Run Code Online (Sandbox Code Playgroud)

您可以通过在一个地方更改该常量而不影响具有相同值的所有其他常量,使更改变得更容易.

简短的回答是命名常数使你的生活更轻松.这真的应该是使用它们的理由.

一些极端主义者会坚持认为你的程序中你应该拥有的唯一硬编码常数是-1,0和1 - 有些会更进一步,但我们可以打破这些问题:-)我不是那么说但是我确实认为尽可能避免它们是个好主意.

我觉得有趣的一件事是那些做以下事情的人:

#define SEVENTY_TWO 72
Run Code Online (Sandbox Code Playgroud)

我不确定他们认为他们会得到什么,但我实际上得到了一次回应我在关于硬编码的代码审查中发表的评论72(我现在可以笑一下但我不太高兴在第二次审查会议上).


另一个原因是使代码更具可读性.除非你有数学背景,否则当你1.414在代码中看到一个常数时,你将会感到茫然.但是,符号 SQR_ROOT_OF_2可能更容易理解.它与大多数其他常量相同,例如:

SECS_PER_DAY      86400
CUST_ADDR_LINES   7
INVALID_ID        -1
DAYS_PER_CENTURY  36524
PASS_LEVEL        63
MIN_REPUTATION    10000
MAX_LOAN_AMT      200000
Run Code Online (Sandbox Code Playgroud)

您是否愿意将分散在右侧的那些数字的代码分散,或者您更愿意阅读更好地呈现意图的代码?