Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中,从OOP思维转变为纯面向函数的编程思维有多难?_C#_F#_Functional Programming - Fatal编程技术网

C# 在.NET中,从OOP思维转变为纯面向函数的编程思维有多难?

C# 在.NET中,从OOP思维转变为纯面向函数的编程思维有多难?,c#,f#,functional-programming,C#,F#,Functional Programming,从beta版开始,我已经与您合作多年。我正在经历一段时间,从到(FOP)。我在20世纪80年代末开始学习和功能组合的概念,并从1995年左右开始从事面向对象的工作,那时我正处于婴儿期,使用过程和面向对象的多范式方法进行编程。有没有好的书籍建议,帮助从一个根深蒂固的OO程序员过渡到函数式编程 我试过一本书,但它似乎需要一些这方面的背景知识,而且很难接近 我有几本关于F#的书,但这一切似乎都有点含糊不清,只是为了完成工作。它还将对象与函数混合以满足需要 在我的OOP思想中,我似乎比Haskell想得

从beta版开始,我已经与您合作多年。我正在经历一段时间,从到(FOP)。我在20世纪80年代末开始学习和功能组合的概念,并从1995年左右开始从事面向对象的工作,那时我正处于婴儿期,使用过程和面向对象的多范式方法进行编程。有没有好的书籍建议,帮助从一个根深蒂固的OO程序员过渡到函数式编程

我试过一本书,但它似乎需要一些这方面的背景知识,而且很难接近

我有几本关于F#的书,但这一切似乎都有点含糊不清,只是为了完成工作。它还将对象与函数混合以满足需要

在我的OOP思想中,我似乎比Haskell想得多,但我认为要获得真正的好处,我需要进入FOP的思维模式,以便从代码中获得最佳效果。在我的日常C#工作中,我已经阅读函数编程大约两年了。但我觉得我没有进入思考


我很确定有很多人和我一样。我认为,任何答案都会对很多希望转到F的C组成员有很大帮助。尤其是市场上有很多大的击球手要求F#。我是一名承包商,需要尽快跟上进度。

这肯定是主观的,但我认为很多人都在问类似的问题。当我开始学习F#(作为一个有C#经验的人)时,我当然是这样做的。以下是一些不同的想法:

  • 选择正确的学习问题-学习函数式编程的最佳方法是开始从事一些非琐碎的项目。如果您选择一个易于用OO方式解决的项目,那么您可能会倾向于OO解决方案。然而,如果您选择了一些自然适合FP解决方案的项目,那么您将学到一些东西。在我的例子中,我研究了从F#引语到JavaScript的翻译器,这涉及到大量递归处理和歧视联合

  • 不要试图做到完美如果你试图用功能性的方式写东西,第一次尝试可能就不完美。不要担心这一点(也不要对自己说,你可以用面向对象的方式做得更好)。你也可以通过FP方式做得更好——只是需要一些时间来了解如何做到这一点

  • 试着做一个纯粹的人——如果你开始学习Haskell,那么你就必须编写纯粹的函数代码。F#并不强制执行这一点,但我认为这并不意味着F#不适合学习函数式编程。如果您了解C#和.NET,您可以重用大量经验。只是试着对自己更严格一些,避免使用非功能性的构造,比如可变状态和继承——它们有时是有用的,但是在你学会用FP的方式思考之后,你可以使用它们

回答这样的问题是我写这本书的主要动机之一,所以这可能会有帮助

有没有好的书籍建议,帮助从一个根深蒂固的OO程序员过渡到函数式编程

计算机程序的结构和解释(SICP):

  • 书籍:
  • 视频讲座:
他的课程似乎主要集中在功能组合上。它是用LISP语言编写的,但与语言无关,更多的是抽象概念


我不认为他对纯FP说了太多(或任何东西),但我也没有真正读过全部内容:)但是概念和思维方式应该仍然非常适用。

我认为要真正理解函数式编程,你必须首先重新组织你所有关于实现不同事物的方法的知识(例如,您必须了解对象可能被表示为哈希映射,甚至是关联列表,而不仅仅是记录)。此外,您还需要开始考虑不可变数据和纯函数(没有副作用的过程)。然后您必须比较实现和处理对象的函数方法和过程方法

所有这些你们都可以在经典书籍中找到,不仅可以学习FP,还可以学习一般的编程。要理解函数式,你们不必阅读所有的书,至少要阅读前三章

在你理解了主要的FP概念并能够以它的风格实现任何东西之后,阅读任何关于静态类型语言的书。例如,关于F#的压力书将更容易阅读。

是一本不错的书,尽管它可能有点太基本了,因为你可能已经从你所学的书中了解了Haskell的语法。

再往上看,如果你在那一页上向下滚动,就会看到一堆视频讲座的链接,这些视频讲座是根据微软研究院的埃里克·梅杰(Erik Meijer)的书制作的

等式推理的东西特别有趣,即使只是在学术上


在应用方面,另一个答案中给出的现实世界函数编程书看起来非常不错——虽然我没有读过,所以我不能做出任何判断。

Learn Scheme,它对我有用:)看起来很主观,每个人的学习曲线都不一样,各种过渡工具的用处也是非常个人化的。@jball:这是学习概念的方法,而不是产品级语言本身。顺便说一句,在某个时候,循环开始感到奇怪。@jball我同意——主观问题。投票结束。我试过一本书,唐·赛姆斯的书很棒。虽然我想掌握函数式编程,一开始是语言不可知论的,但我会做F#。我只是希望有一本好的“为白痴学习哈斯克尔”的书。我捡起的那个伤了我的大脑。天气非常干燥,几天前我在一所大学的校园里捡到了它