我从来没有用过“纯”函数式语言编程。我在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)?或者完全是其他的东西(比如,一个为封装过程代码的对象生成事件的功能事件系统)?
发布于 2013-09-17 16:53:25
在你对所涉及的问题有更严格的经验之前,我会尽量减少你的观点。
套用Bjarne Stroustrup的话说:在过去的几十年里,函数式编程在学术界有大量的播出时间,但在工业中部署的函数式系统的数量仍然大约为零。
更具体地说,lambda只是声明单例函数器对象(具有operator()函数的类)的一种简便语法方式,它从封闭作用域中捕获变量作为成员变量。我不认为它是一个“函数式编程”的概念,就像C++中的任何其他实体一样。
函数式编程通常涉及不可变数据类型(一旦构造就不会改变的对象)和纯函数(输出完全依赖于其输入的函数,而不是其他函数)。
如果你对函数式编程感兴趣,现在就有一个叫做Functional Programming Principles in Scala的免费在线课程(MOOC),它是瑞士一所顶尖大学对这门课程的非常好和高度评价的介绍。
发布于 2013-09-17 17:10:56
我不能在C++11中谈论lambda,但是我知道在Java8中添加lambda的部分原因是为了支持开箱即用的透明并发。多么?它提供了一个(惰性的) Stream接口,您只需调用parallel和sequential就可以在并行和顺序处理之间切换(这些方法返回新的流,并且对现有流没有副作用)。
如果您查看Stream中的方法,您很快就会注意到,如果没有lambda工具,使用它们将是一件极其痛苦的事情。让我们来看看some examples,看看你可以如何结合使用streams和lambdas。
应该可以为C++11实现一个类似的库,如果还没有这样的库的话。
https://stackoverflow.com/questions/18845035
复制相似问题