像大多数人一样,我从命令式代码(主要是Java、Ruby、Javascript)开始,现在仍然做了很多工作。
我从来都不是OO的狂热粉丝,要么是因为我从来没有正确地理解它,要么是因为我不认为OO。
通过javascript,传递函数,闭包等等,我第一次看到了FP。从那时起,我就爱上了FP。
最近,我对Clojure (可能是Scala)产生了兴趣,有朝一日甚至可能尝试Haskell。我喜欢我在函数式方法中看到的东西,但是我如何看待函数式呢?在过去的3-4年里,我一直在做命令性的事情,我的大脑倾向于在处理问题时思考命令性。
我如何忘记命令式风格(我需要这样做吗?)更多地从功能上思考?
发布于 2010-10-15 02:39:43
不是的。不要忘记命令式风格,因为你仍然需要它。即使是许多做得很好的FP库,在幕后也显得有些势在必行。最好考虑将FP添加到您的工具和技术列表中,而不是通过一种或另一种技术来实现全金属。
现在,关于你如何开始学习FP风格?玩具项目--或者你自己编写的实用项目。或者见鬼,再给自己写一篇博客吧--不过有点曲折!如上所述,关键的事情是实践。在执行此操作时,请避免共享状态。尽可能多地追求纯净(也就是避免副作用)。使用闭包、模式匹配(如果语言支持)和lambda函数。从函数在程序中是第一类数据类型的角度来看--将它们作为输入,并将它们作为输出返回。这个列表还在继续,但如果你在关注这些概念,你会一次又一次地看到相同的概念。
如果您觉得在这方面需要一个温和的推动,请使用鼓励FP风格的工具(语言),如F#或Scala。
如果你觉得你需要更多的“严酷的爱”的帮助,联系Haskell :)
否则,请使用您选择的工具,并且只需记住FP概念(以上)。如果您决定走这条路,有一本非常好的书,叫做Real-World Functional Programming,它使用F#和C#来说明同时适用于“主要”FP语言(F#)和“主要”面向对象语言C#的技术。
发布于 2010-12-23 08:22:28
去找哈斯克尔。因为它是纯粹的,你被迫去思考功能性。在F#或Scala中,你仍然可以编写非常命令式的代码。我强烈推荐Graham Hutton写的关于Haskell的书。
https://stackoverflow.com/questions/3934132
复制相似问题