如何处理代码中的魔术数字(Magic Number)

我真的很不喜欢“魔术数字(Magic Number)”这个说法。我看到很多人都搞错了。我见过不少次 code review,有人一看到代码中的任何数字,就会评论说,"这是一个魔术数字,一定要把它放到文件前面并定义一个名字。"

(我也比较怀疑把所有的变量都放在文件最前面的必要性,这个话题下次再聊)。

我觉得可以在代码中使用各种数字,只是你需要注意操作方式。

什么是魔术数字?

通过谷歌搜索,你可以得到一堆蹩脚的定义,但底线是,一个魔术数字,是你的代码中很难推理的数字。

fun generate() {
    for (i in 0 until 52) {
        deck[i] = uniqueCard()
    }
}

52 是哪里来的?

原来这段代码是要生成一副扑克牌,因为 52 是一副扑克牌的数量,因此我们可以给这个数字起个名字。

const val numberOfCardsInADeck = 52


fun generate() {
    for (i in 0 until numberOfCardsInADeck) {
        deck[i] = uniqueCard()
    }
}

这样就得到可读性更强、可维护性更强的代码。很好,你已经掌握了编写干净代码的方法。

但是,这只是冰山一角。这个例子的问题是,开发者很容易就能从代码的其他部分中找出 52 是什么,这是一个相当

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值