天天看点

没有 if 语句的代码长什么样子

没有 if 语句的代码长什么样子

if 语句是任何软件工程师用来解决日常问题的基本工具之一。从第一天开始,它就是软件工程的一部分,就在学生写下第一个“hello world”之后。它无处不在,它的破坏力也是如此。

尽管工程师们系统地对这一现实视而不见,但让我们看看我们如何改变思维方式来克服这个问题,并赢得与臭名昭著的 if 语句的战斗。

2013 年,我对一个有 20 年历史的软件进行逆向工程,他的原始创建者没有留下任何文档。几周后,我了解了算法的工作原理——它背后的美——以及它的边缘情况。这些边缘情况由 if 语句(或它们的邪恶化身)映射,最终在代码中形成一片森林。

如果您想知道,是的,它的原始创建者使用模式来适当地组织代码并使其可读,但事实是,模式只是为了可读性而隐藏 if 语句,但它们并没有摆脱它们。所以,最后,它们都在周围——就像蚊子整夜咬你一样。

就在那一刻,我用以下方式挑战自己。

如果每个算法可以使用有限数量的 if 语句,我将如何编写解决方案?

经过一番反复,我发现 if 语句让工程师懒于编码,此外,为他们提供了一种简单的方法来避免思考如何雄辩地解决问题——它创造了一种“啊,那里是一个边缘情况,让我们写一个 if 语句”。

考虑到这一点,现在我们可以谈谈我一开始承诺要分享的心态:

考虑一个问题,使边缘情况成为常态的一部分,而不是例外。

让我们用这种新的思维方式来解决一个实际的问题,看看它是如何工作的,在这种情况下——只是为了加强我之前关于工程师在这个问题上系统性地盲目的观点——让我们使用算法工程师在大学第一年学习一种称为“单链表”的特定数据类型:

没有 if 语句的代码长什么样子

尽管它是一段被广泛使用的代码,并且在世界各地的大学中都以这种方式教授,但该代码已经很糟糕了——如果你到目前为止已经注意了,你可能知道为什么……

是的,最后的 if 语句 。

我们不需要深入分析代码,简单来说就是处理一个特定的场景,当条目需要被删除,但是,删除的方式取决于它是第一个条目还是在中间(边缘 案子)。

如果我们使用新的思维方式——以边缘情况成为常态的一部分而不是例外的方式来思考问题——我们可以用这种新的方式重写这段古老的代码:

没有 if 语句的代码长什么样子

看看 if 语句是如何消失的,但更重要的是,边缘情况现在是规范的一部分,而不是例外,而且——作为一个重要的副作用——代码变得更加直接和雄辩。

尽管这是我们掌握主要思想的一个基本示例,但概念要复杂得多;它是关于看到边缘案例模式并本能地知道如何将它们转化为规范。一开始很难,但通过练习变得更容易管理。

现在继续打开您昨天正在处理的代码,并尝试使用这种新思维方式删除您的第一个 if 语句!

学习更多技能

请点击下方公众号

继续阅读