Oop 函数式编程与面向对象编程
到目前为止,我主要接触OO编程,并期待着学习一门函数式语言。我的问题是:Oop 函数式编程与面向对象编程,oop,functional-programming,paradigms,Oop,Functional Programming,Paradigms,到目前为止,我主要接触OO编程,并期待着学习一门函数式语言。我的问题是: 什么时候你会选择函数式编程而不是面向对象编程 函数式编程是一个更好的选择的典型问题定义是什么 您不必在这两种范式之间进行选择。您可以使用许多功能概念编写具有OO体系结构的软件FP和OOP本质上是正交的 以C#为例。你可以说它主要是OOP,但是有很多FP概念和构造。如果考虑 LINQ,允许LINQ存在的最重要的结构在本质上是功能性的: lambda表达式< /强> 另一个例子,F#。你可以说它主要是FP,但是有很多OOP
- 什么时候你会选择函数式编程而不是面向对象编程李>
- 函数式编程是一个更好的选择的典型问题定义是什么
- ,杰里米·米勒著。这是一篇很棒的文章(尽管格式很差),展示了C#上的许多FP技术和实际示例
- ,作者:托马斯·佩特里切克。这是一本主要讨论FP概念的好书,试图解释它们是什么,何时应该使用它们。F和C中都有很多例子。同时,它也是一个很好的信息来源
- 当您对事物有一组固定的操作,并且随着代码的发展,您主要添加新事物时,面向对象语言是很好的。这可以通过添加实现现有方法的新类来实现,而现有的类则不受影响
- 当您有一组固定的东西,并且随着代码的发展,您主要在现有的东西上添加新的操作时,函数式语言是很好的。这可以通过添加使用现有数据类型进行计算的新函数来实现,而现有函数则不受影响
- 向面向对象程序添加新操作可能需要编辑许多类定义才能添加新方法
- 向功能程序中添加新类型的内容可能需要编辑许多功能定义以添加新案例
函数式语言擅长以树的形式处理符号数据。一个典型的例子是编译器,源语言和中间语言很少发生变化(大部分是相同的),但编译器编写者总是添加新的翻译和代码改进或优化(对事物的新操作)。编译和翻译通常是函数式语言的“杀手级应用程序”。面向对象编程提供:
- 内部状态的控制突变
- 限制耦合到内部表示
- 兼容类型的替换(多态性)
- 在类之间共享实现的粗略方法(实现继承)
编辑删除了讨论类型类时对隐式转换的引用。在Scala中,类型类是用隐式参数编码的,而不是转换,尽管隐式转换是实现兼容类型替换的另一种方法。不要忘记,您可以将F和C代码混合在一起,这样您就可以充分利用每种代码的优点。您的答案是.Net强大功能的一个很好的例子。这表明它能够利用这两种范式的力量。嘿,如果我开始燃烧,对不起。我并不是说其他平台的功能不那么强大,只是说.NET不仅支持OOP。例如,它有尾部调用优化,我不认为FP和OOP是正交的。使用函数构造与函数编程不同。当然,在Linq中使用像lambdas这样的函数结构可以减少OO,但它仍然不是函数程序