魔术数字

王朝百科·作者佚名  2011-03-08  
宽屏版  字体: |||超大  

魔术数字(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:setColor("text", 0xffffff)

例2是设定以白色显示程式码。 然而十六进制的色码0xffffff很难直觉看懂是“白色”,故也算是一种魔术数字。

下面是一种拿掉魔术数字的方式。

例2 (修正):white = 0xffffff setColor("text", white)

像这样,将魔术数字置换成常数或列举型别是经常用来解决魔术数字问题的手段。由于常数可以赋予易懂的名称,可使帮助阅读者了解数值的意义。

当然,在程式初始化部分定义的常数列表不称为魔术数字。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有