减少变量
在第8章中,我们讲了如何引入“解释”或者“总结”变量来使代码更可读。这些变量很有帮助是因为它们把巨大的表达式拆分开,并且可以作为某种形式的文档。
在本节中,我们感兴趣的是减少不能改进可读性的变量。当移除这种变量后,新代码会更精练而且同样容易理解。
在下一节中的几个例子讲述这些不必要的变量是如何出现的。
没有价值的临时变量
在下面的一小段Python代码中,考虑now这个变量:
now是一个值得保留的变量吗?不是,下面是原因:
·它没有拆分任何复杂的表达式。
·它没有做更多的澄清——表达式datetime.datetime.now()已经很清楚了。
·它只用过一次,因此它并没有压缩任何冗余代码。
没有了now,代码一样容易理解。
像now这样的变量通常是在代码编辑过后的“剩余物”。now这个变量可能从前在多个地方用到。或者可能那个程序员料想now会多次用到,但实际上再没用到过它。
减少中间结果
下面的例子是一个JavaScript函数,用来从数组中删除一个值:
变量index_to_remove只是用来保存临时结果。有时这种变量可以通过得到后立即处理它而消除。
通过让代码提前返回,我们不再需要index_to_remove,并且大幅简化了代码。
通常来讲,“速战速决”是一个好的策略。
减少控制流变量
有些时候你会在代码的循环中见到如下模式:
甚至可以在循环里多处把变量done设置为true。
这样的代码通常是为了满足某些心照不宣的规则,即你不该从循环中间跳出去。根本就没有这样的规则!
像done这样的变量,称为“控制流变量”。它们唯一的目的就是控制程序的执行——它们没有包含任何程序的数据。在我们的经验中,控制流变量通常可以通过更好地运用结构化编程而消除。
这个例子改起来很简单,但是如果有多个嵌套循环,一个简单的break根本不够怎办呢?在这种更复杂的情况下,解决方案通常包括把代码挪到一个新函数中(要么是循环中的代码,要么是整个循环)。
你希望你的同事随时都觉得是在面试吗?
来自微软的Eric Brechner曾说过一个好的面试问题起码要涉及三个变量。[1]可能是因为同时处理三个变量会强迫你努力思考!这对于面试来讲还说得过去,因为你要尝试找到候选人的极限。但是你希望你的同事在读你的代码时感觉就像你在面试他们吗?
[1]《代码之道》英文书名《Hard Code》,由机械工业出版社引进并出版,作者Eric Brechner。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论