从OOP思想转变为.NET中纯粹的功能导向编程思维有多难?

WeN*_*ers 7 c# f# functional-programming

从beta开始,我一直在使用C#多年.我有一点时间,从OOP转向功能导向编程(FOP).我从20世纪80年代后期开始使用过程编程和功能组合的概念,并且从1995年左右开始就开始使用OO,当时UML正处于初期阶段,我使用程序和OO的多范式方法在Delphi中进行编程.是否有任何好的书籍建议,以帮助从根深蒂固的OO程序员过渡到函数式编程?

我尝试了一本Haskell书,但它似乎需要一些背景知识并且非常难以接近.

我有几本关于F#的O'Reilly,Apress书籍,但这一切看起来都有点毛茸茸,只是完成工作.它还将对象与功能混合在一起以满足需求.

F#似乎原谅我在我的OOP思考中比Haskell更多,但我认为要获得真正的好处,我需要进入FOP的思维模式以充分利用代码.我在日常的C#内容中阅读了大约两年的函数式编程.但我觉得我没有深入思考.

我很确定那里有很多像我一样的人.我认为,任何答案对许多希望转移到F#的C#人员都有很大的帮助.特别是在市场上有许多大型击球手要求F#.我是一名需要尽快加速的承包商.

Tom*_*cek 10

这绝对是主观的,但我认为很多人都在问类似的问题.当我开始学习F#时,我确实做过(作为有C#经验的人).以下是一些不同的想法:

  • 选择正确的学习问题 - 学习函数式编程的最佳方法是开始研究一些非平凡的项目.如果您选择一个易于以OO方式解决的项目,那么您可能会倾向于OO解决方案.但是,如果您选择一些自然适合FP解决方案的项目,那么您将学到一些东西.就我而言,我从事F#引用到JavaScript的翻译工作,涉及大量的递归处理和有区别的联合.

  • 不要试图做到完美 - 如果你试图以功能性的方式写东西,它可能在第一次尝试时并不完美.不要担心(并且不要对自己说你可以用OO方式做得更好).你也可以用FP方式做得更好 - 只需要一些时间来了解如何做到这一点.

  • 尝试纯粹主义 - 如果你开始学习Haskell,那么你将不得不编写纯粹的功能代码.F#没有强制执行,但我认为这不会使F#不适合学习函数式编程.如果你了解C#和.NET,你可以重用很多经验.只是尝试对自己更严格,避免使用非可执行的构造,如可变状态和继承 - 它们有时很有用,但你可以在学会用FP方式思考后使用它们.

还有一点无耻的插件 - 回答这样的问题是我的真实世界功能编程书籍的关键动机之一,所以也许这可能会有所帮助......