本节书摘来异步社区《游戏编程模式》一书中的第1章,第1.6节,作者: 【美】Robert Nystrom (尼斯卓姆) 译者: 赵卫兵 , 许新星 , 姜召阳 , 陈侃 , 屈光辉 , 郑炯彬 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.6 简单性
最近,我觉得如果有任何方法来缓解这些限制,那便是简单性了。在今天我所写的代码中,我非常努力地尝试着编写最干净、最直接的函数来解决问题。这种代码在你阅读之后,就会明白它究竟做了什么,并且不敢想象还有其他可能的解决方案。
我致力于保持数据结构和算法的正确性(在这个顺序下),然后继续往下做。我觉得如果我能保持简单性,代码量就会变少。这意味着更改代码时,我的脑袋里只需装载更少的代码。
它通常运行速度快,因为根本就没有那么多的开销,也没有太多的代码要执行(这当然并非总是如此,你可以在小部分代码中进行很多的循环和递归)。
Blaise Pascal用了一句名言作为了一封信的结尾:“我会写一封更简短的信,但我没有足够的时间。”
另一种引用来自Antoine de Saint- Exupery:“极臻完美,并非无以复加,而是简无可减。”
言归正传,我注意到,每次我修改这本书的章节时,它都会变得更短。一些章节在完成时要比原来缩短20%。
但是,请注意,我并不是说简单的代码会花费较少的时间来编写。你会觉得最终的总代码量更少了,但是一个好的解决方案并不是更少的实际代码量,而是对代码的升华。
我们很少会遇到一个非常复杂的问题,用例反而有一大堆,例如,你想让X在Z的情况下执行Y而在A的情况下执行W,以此类推。换句话说,是一个不同实例行为的长列表。
最省脑力的方法就是只编写一次测试用例。看一下新手程序员,这是他们经常做的:为每个需要记住的用例构建大量的条件逻辑。
在那里面毫无优雅性,当程序有输入或者编码者稍微考虑得跟用例有些不一样时,这种风格的代码就最终会沦陷。当我们考虑优雅的解决方案时,浮现脑海中的就有一个:一小块逻辑就能正确地处理一大片用例。
你会发现这有点像模式匹配或解谜。它需要努力识破测试用例的分散点,以找到它们背后隐藏的秩序。当你把它解决时,会感觉很棒。