【发布时间】:2011-06-19 17:56:01
【问题描述】:
在函数式编程语言中使用对象的正当理由是什么?我看到 f# 是一种函数式编程语言,在处理 .net 类生态系统时,它在对象方面非常有用。但除了与可能用 c# 编写的其他程序集/程序的交互之外,为什么有人会选择使用面向函数的语言或风格的对象来分解程序?
混合一种程序风格是一种帮助还是一种障碍?
【问题讨论】:
标签: f#
在函数式编程语言中使用对象的正当理由是什么?我看到 f# 是一种函数式编程语言,在处理 .net 类生态系统时,它在对象方面非常有用。但除了与可能用 c# 编写的其他程序集/程序的交互之外,为什么有人会选择使用面向函数的语言或风格的对象来分解程序?
混合一种程序风格是一种帮助还是一种障碍?
【问题讨论】:
标签: f#
功能和面向对象的设计使不同类型的扩展变得容易。给定函数设置中的可区分联合,很容易定义在该类型上工作的任意数量的函数,但是很难为该类型添加额外的案例,因为这需要回过头来为每个函数添加额外的案例匹配类型。另一方面,给定一个基本类型(或接口)一个 OO 设置,添加新的子类型很容易,但是向基本类型添加新的操作很难,因为它可能需要修改现有的子类型以添加新操作的实现给每一个人。
根据与手头任务最相关的可扩展性类型,函数式或面向对象的方法可能更有意义,因此最好同时使用这两个选项。一种流行的方法是使用“小型”的函数式方法和“大型”的 OO 方法(例如,在 Luke Hoban 的 this podcast 中提到过)。
【讨论】:
对象提供封装,使大规模编程更容易。
在函数式编程语言中使用对象的正当理由是什么?
在函数式语言中使用对象有多种原因:
程序的大规模结构化。
与现有 OOP 代码(例如在 JVM 或 CLR 上)的互操作性。
使用更多类扩展类层次结构的能力自然适合的问题。
混合一种程序风格是一种帮助还是一种障碍?
可能会有所帮助,但如果没有充分的理由这样做不是一个好主意。
【讨论】: