F# 在函数式编程语言中使用对象有什么好处?

F# 在函数式编程语言中使用对象有什么好处?,f#,F#,在函数式编程语言中使用对象的有效理由是什么?我看到f#是一种函数式编程语言,在处理.net类生态系统时,它在对象方面有很大的优势。但除了与其他可能用c#编写的程序集/程序的交互之外,为什么会有人选择使用面向函数的语言或风格来分解程序 混合一种程序风格是一种帮助还是一种阻碍?功能性和面向对象的设计使不同类型的扩展变得容易。在函数设置中给定一个有区别的并集,很容易定义任意数量的函数来处理该类型,但很难向该类型添加额外的案例,因为这需要返回将额外的案例添加到模式与该类型匹配的每个函数中。另一方面,给定

在函数式编程语言中使用对象的有效理由是什么?我看到f#是一种函数式编程语言,在处理.net类生态系统时,它在对象方面有很大的优势。但除了与其他可能用c#编写的程序集/程序的交互之外,为什么会有人选择使用面向函数的语言或风格来分解程序


混合一种程序风格是一种帮助还是一种阻碍?

功能性和面向对象的设计使不同类型的扩展变得容易。在函数设置中给定一个有区别的并集,很容易定义任意数量的函数来处理该类型,但很难向该类型添加额外的案例,因为这需要返回将额外的案例添加到模式与该类型匹配的每个函数中。另一方面,给定一个基类型(或接口)一个OO设置,添加新的子类型很容易,但向基类型添加新操作很难,因为它可能需要修改现有的子类型以向每个子类型添加新操作的实现


根据与手头任务最相关的可扩展性类型,函数式方法或面向对象方法可能更有意义,因此最好两种方法都可用。一种流行的方法是“在小范围内”使用函数方法,“在大范围内”使用OO方法(例如,Luke Hoban中提到过)。对象提供封装,使大规模编程更容易

在函数式编程语言中使用对象的有效理由是什么

函数式语言中使用对象有多种原因:

  • 程序的大规模结构化

  • 与现有OOP代码的互操作性(例如在JVM或CLR上)

  • 自然适合使用更多类扩展类层次结构的问题

混合一种节目风格是一种帮助还是一种阻碍


这可能会有所帮助,但如果没有充分的理由,那就不是一个好主意。

我可能也会采取这种流行的方法。它有助于将函数封装成有意义的东西,即对象。这是否意味着函数方法不能扩展到大型系统,只使用FOP/FOA方法?事实上,封装与状态无关。您甚至可以使用无状态的OOP,例如,请参见OCaml中的函数对象更新。如果您将process替换为object.Duplicate,则“在小范围内”使用函数方法,“在大范围内”使用OO方法与Erlang使用的方法非常相似。谢谢你的回复。您的答案倾向于转到我有争议的其他领域,例如可伸缩性和将继承作为一种脆弱的编程方法的使用。我要补充的是,我最近一直在研究代码“气味”,我遇到的一个有趣的观点是,设计模式是一种语言的象征,而这种语言并不适合所有领域。我觉得这整个编程中的“大”和“小”,在我看来是有点过时了。我看不到函数式编程在小程序中的应用,这与C在小程序中的应用非常相似。