【问题标题】:What are the benefits of using Objects in a functional programming language?在函数式编程语言中使用对象有什么好处?
【发布时间】:2011-06-19 17:56:01
【问题描述】:

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

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

【问题讨论】:

标签: f#


【解决方案1】:

功能和面向对象的设计使不同类型的扩展变得容易。给定函数设置中的可区分联合,很容易定义在该类型上工作的任意数量的函数,但是很难为该类型添加额外的案例,因为这需要回过头来为每个函数添加额外的案例匹配类型。另一方面,给定一个基本类型(或接口)一个 OO 设置,添加新的子类型很容易,但是向基本类型添加新的操作很难,因为它可能需要修改现有的子类型以添加​​新操作的实现给每一个人。

根据与手头任务最相关的可扩展性类型,函数式或面向对象的方法可能更有意义,因此最好同时使用这两个选项。一种流行的方法是使用“小型”的函数式方法和“大型”的 OO 方法(例如,在 Luke Hoban 的 this podcast 中提到过)。

【讨论】:

  • 我也采用这种流行的方法。它有助于将函数封装成有意义的事物,即对象。
  • 这是否意味着函数式方法无法扩展到大型系统,仅使用 FOP/FOA 方法?
  • 确实,封装与状态无关。你甚至可以拥有没有状态的 OOP,例如请参阅 OCaml 中的功能对象更新。
  • “在小范围内”使用函数式方法,“在大范围内”使用 OO 方法,如果你用进程代替对象,看起来很像 Erlang 使用的方法。
【解决方案2】:

对象提供封装,使大规模编程更容易。

在函数式编程语言中使用对象的正当理由是什么?

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

  • 程序的大规模结构化。

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

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

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

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

【讨论】:

  • 感谢您的回复。您的答案往往会转移到我遇到问题的其他领域,例如可伸缩性和使用继承作为大型编程的脆弱方法。我要补充一点,我最近一直在研究代码“味道”,我遇到的一个有趣的点是,设计模式意味着一种不适合所有领域的语言。我觉得这整个编程中的“大”和“小”,在我心里有点过时了。我看不到小型函数式编程,这与小型 C 的使用方式非常相似。
猜你喜欢
  • 2013-04-05
  • 2013-07-23
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多