魔术数字
程式设计中所谓的直接写在程式码里的具体数值
魔术数字(magic number)是程式设计中所谓的直接写在程式码里的具体数值(如“10”“123”等以数字直接写出的值)。虽然程式作者写的时候自己能了解数值的意义,但对其他程式员而言,甚至制作者本人经过一段时间后,会难以了解这个数值的用途,只能苦笑讽刺“这个数值的意义虽然不懂,不过至少程式会动,真是个魔术般的数字”而得名。
理由
因为下述理由,一般认为程式码中不应该含有魔术数字。
一、数值的意义难以了解
二、数值需要变动时,可能要改不只一个地方
举例
例1:price_tax = 1.05 * price
例1是对输入的价格(price)计算含税(price_tax)售价的程式。 但税率并不是万年不变,当政府调整税率时,会有修改程式的必要。 这里“1.05”就是一种魔术数字,“为什么是1.05”会让人无法马上了解。
下面是去掉魔术数字的范例,程式容易了解也容易修正。
例1 (修正):TAX = 0.05 price_tax = (1.0 + TAX) * price
例2是设定以白色显示程式码。 然而十六进制的色码0xffffff很难直觉看懂是“白色”,故也算是一种魔术数字。
下面是一种拿掉魔术数字的方式。
像这样,将魔术数字置换成常数或列举型别是经常用来解决魔术数字问题的手段。由于常数可以赋予易懂的名称,可使帮助阅读者了解数值的意义。
当然,在程式初始化部分定义的常数列表不称为魔术数字。
参考资料
最新修订时间:2024-05-21 14:48
目录
概述
理由
举例
参考资料