0

我从来没有用“纯”函数式语言编程过。我在 C 和 C++ 上获得了成功,尝试过 Java、C#、PHP 等……但我总是发现自己又回到了 C++。也许我有点受虐狂,但我喜欢低层次的东西。

我还发现我可以通过嵌入LUA、Python或其他脚本语言(以及它们对快速开发的关注)快速完成快速开发。

长话短说,我不会退出 C/C++,所以不要劝我放弃它。然而,我几乎没有时间学习 C++11,而且我开始感受到未来函数式编程曲线的加速。

我的问题是双重的。C++11 的 lambda 功能概念是从什么语言“借来的”,什么语言是理想的,如果不是那种语言,或者如果有的话,可以感受一下使用 C++11 的新 lambda 的“方式”功能(没有双关语)。

PS:老实说,我对 C++ 的新“臃肿”添加不太满意。我喜欢 C++ 的样子,它开始感觉这种语言变得臃肿。我不会把这当成事实。我听说您必须经历过一种功能语言才能“获得它”。

老实说,城里似乎有一个新的重量级人物。首先它只是“过程”编程,然后是 OOP 范式转变,而现在似乎事情正朝着“功能性”的做事方式发展。

当然,过程式编程仍然存在并且很好(在类内部),我不得不想知道 lambda 方式将在哪里适合(正确使用)类/oop 设计。它会只是程序部分的替代品吗?让 OOP 成为过去 (pfft)?或者完全是其他的东西(比如,一个为封装过程代码的对象生成事件的功能性事件系统)?

4

2 回答 2

2

在您对所涉及的问题有更严格的经验之前,我会尽量减少您的意见。

套用 Bjarne Stroustrup 的话说:在过去的几十年里,函数式编程在学术界有很多时间,但工业中部署的函数系统的数量仍然大约为零。

更具体地说,对于您的问题,lambda 只是一种简写语法方式,用于声明一个单例仿函数对象(具有operator()函数的类),该对象从其封闭范围捕获变量作为成员变量。我不会认为它是“函数式编程”概念,比 C++ 中的任何其他实体更是如此。

函数式编程通常涉及不可变的数据类型(一旦构造就不会改变的对象)和纯函数(具有完全依赖于其输入的输出的函数,仅此而已)。

如果您对函数式编程感兴趣,那么现在开始有一个免费的在线课程 (MOOC),称为Scala 中的函数式编程原理,它是瑞士顶尖大学之一对该主题的非常好的和高度评价的介绍。

于 2013-09-17T08:53:24.617 回答
0

我不能谈论 C++11 中的 lambda,但我知道将 lambda 添加到 Java 8 的部分理由是启用开箱即用的透明并发支持。如何?它提供了一个(惰性)接口,您可以通过调用简单地在并行和Stream顺序处理之间切换(这些方法返回新流,并且对现有流没有副作用)。parallelsequential

如果您查看 中的方法Stream,您会很快注意到如果没有 lambda 工具,使用它们会非常痛苦。查看一些示例,了解您可以将流与 lambda 结合使用。

如果还没有这样的库,应该可以为 C++11 实现类似的库。

于 2013-09-17T09:10:55.820 回答