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

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

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

魔法数字真正让你头痛的地方是,不理解它从哪里来的,拿下面调整搜索算法的代码来说吧。

这一堆数字到底是什么意思?要理解这些数字是干什么用的并不容易。

魔法数字的问题是什么?

假设你的应用规模越来越大,需要搜索的东西越来越多,突然间你的搜索结果并没有得到你想要的结果。

我们有这样的问题:当我搜索麦片时,结果中没有出现麦片,尽管我知道它在里面。

所以在这个算法被调整了四年之后,你需要改变这些值来修复这个 bug,该如何入手?

这就是魔法数字的问题。如果把这些数字用长长的描述性的名字组合在一起,再加上代码文档,详细说明改变它们对搜索结果的影响,维护起来会更简单。

在解释算法方面也要加分。

让我们修正一下这个问题吧。

fun search(query: String) {find(query, searchWeight, searchSpread, searchPageSize, searchMaxResults, shouldSearchIndex)}

// Calls our weighted search algorithim. Read the docs about this alogirthim at foo.bar.comfun find(query: String, weight: Float, spread: Float, pageSize: Int, maxResults: Int, index: Boolean) {}

你会不会觉得维护这个代码更舒服?如果有人能用这个文档来解决这个 bug,那就更有底气了。

什么不是魔法数字?

现实中,难于推理的数字并不像容易推理的数字那样经常出现,以这些硬编码的数字为例

这不是一个魔法数字。我重复一遍:这不是一个魔法数字。

我知道,这是在对一些 Java 纯洁主义和有洁癖的人发神经了。

但这个数字并不难理解。它的作用完全是自成一体的:这个视图的高度是42,仅此而已。如果再给它另外起个名字,又能增加什么价值?

fun buildView {view.height = viewHeight}

这不过是臃肿的代码罢了。这似乎是个小例子,但这种无谓地给数字命名的想法很快就会使 UI 代码的大小膨胀,只会增加无意义代码的行数。

那我的代码中到底能不能用数字呢?

当然可以。世界上有很多好的代码都是用数字来写的。你只需要牢记几件事就可以了。

确保你的数字是容易理解 — 比如小学生都可以理解这个数字的作用。

如果你要改变一个数字,调整一些东西,或者在纸上做一些计算来得到一个硬编码的数字,要解释清楚。 在代码中,就 在数字旁边。 或者至少在提交中说明。 对硬编码数字的更改要有解释。

奖励: 确保你的硬编码数字是 DRY(非重复的)。

这不是火箭科学,但使用你的数字有很多微妙的地方。

你应该可以搞定这些,谢谢你的阅读!

感谢 Zack Shapiro.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值