踢您的手动迭代习惯

当约翰·巴科斯(John Backus)于1977年在他的ACM图灵奖演讲中问“编程是否可以从冯·诺伊曼风格中解放出来?”时,他肯定比40年后仍为for(i = 0; i < n; i++)写作的人寄予更高的希望。

冯·诺依曼(Von Neumann)编程语言使用变量来模仿计算机的存储单元。 控制语句详细说明其跳转和测试指令; 和赋值语句模仿其获取,存储和算术。 赋值语句是编程语言的von Neumann瓶颈,使我们可以一次单词的方式思考,就像计算机的瓶颈一样。

到2017年,主要的编程语言已经吸收了函数式编程中最实用的思想。 我在这里说服您,使用高阶函数来处理数据集合通常可以使您的意图比手动迭代更清晰。

从描述如何执行计算作为循环增加计数器的副作用,或者通过从键集中索引到字典开始,我们早就应该进行下一步了。 这种命令式风格要求代码的人工阅读者在脑海中模拟计算机的执行。 那是一件坏事! 取而代之的是在抽象阶梯上上移一个梯级,并根据功能组成描述您的计算工作:过滤,转换和减少输入流。

在我遇到的大多数情况下,数据存储在数组或列表中的事实是出于方便。 存储在其中的数据没有真正排序。 数组通常只是最易于键入的集合,因为所有语言都内置了语法糖。 最好将集合一般认为是容纳某些元素的容器。 在处理它们时,请开始考虑符合给定条件的元素集-这就是过滤器应用程序。 是否需要为每个元素计算一些派生值? 这种转换称为映射。 需要整个集合中的一些总价值吗? 那就是缩小折叠。 学习这些概念,并使用它们更清楚地表达您的意图。

当您将计算作为增加索引的副作用时,了解它需要您逐步执行所有命令。 当您通过功能组合来表达自己的意图时,隐藏错误的空间就更少了。

Interesting Posts