10

我们有一本非常好的 GoF 书(设计模式:可重用的面向对象软件的元素)关于面向对象编程中的模式,以及网络上关于这个主题的大量文章和资源。

有没有关于函数式编程模式(最佳实践)的书籍(文章、资源)?

对于 Python 和 Ruby 等语言的动态编程?

对于 AOP?

4

6 回答 6

16

之前有人问过一个相关的问题:“函数式编程是否取代了 GoF 设计模式”,得到了很好的回应。

“设计模式”的等价物在 FP 中非常模糊。通常,每次在代码中看到“模式”时,您都应该创建一些东西以统一的方式涵盖其所有用途。通常它将是一个高阶函数。

例如下面的 C 代码

for (int i = 0; i < n; i++)
  if (a[i] == 42)
    return true;
return false;

可以想到一些基本的“设计模式”——检查列表中是否有一些特殊元素。此代码段可能会在具有不同条件的代码中多次出现。在 FP 中,您只需多次使用高阶函数。它不再是“模式”。

函数式编程有自己的实践,但它们与 OOP 中的“设计模式”有很大不同。它们包括使用多态性、列表、高阶函数、不变性/纯度、惰性[并非所有都是 FP 必不可少的或特定于 FP]...另请参阅“什么是 FP 的核心概念”。此外,类型类(Haskell)、模块和函子(OCaml)、延续单子拉链手指树幺半群箭头应用函子单子转换器、许多纯函数数据结构等。,Randall Schulz 已经提到,在最好的情况下形成了一个非常丰富的 FP 资源。

要学习如何编写惯用代码,任何关于函数式编程语言的书籍/资源都足够恕我直言(例如,RWHLYAH);命令式思维和功能性思维之间的差异总是在那里解释。

在动态语言中,Jeff Foster 的链接是一个很好的集合;是 JavaScript 中记忆化的一个非常巧妙的用法,可以被认为是一种“设计模式”。

于 2009-11-30T19:17:20.127 回答
6

GoF 中描述的设计模式列表是为 C++ 和 Java 等语言编写的。它有时被认为是使不灵活的语言更加动态的变通方法列表。例如,Ruby 中并不真正需要访问者模式,因为您可以在运行时简单地将添加成员函数更改为您的类。如果可以使用 mixins,装饰器模式就已经过时了。

根据我的经验,当我用 C++ 实现解决方案时,我倾向于将大部分时间花在编写脚手架代码上。我首先创建一个平台,让我在应用程序的程序域中进行思考。设计模式可能是作为对不同种类的脚手架进行分类的一种方式而开发的。

我应该提一下,当我使用 Ruby 编程时,我没有太多支持代码。只是似乎没有必要。

我的理论是,其他语言不会仅仅因为它们的基本语言结构就足够了而强调设计模式的概念。为 Java 和 C++ 辩护:这可能是因为函数式和 AOP 语言通常用于更具体的问题领域或领域,而 Java 和 C++ 则用于所有领域。

现在来点不同的。如果您对 OO 设计感到有些厌烦,并且想学习一些新东西,那么您可能会对Stepanov编写的Elements of Programming一书感兴趣。在这本书中,他解释了如何从数学的角度来处理编程。如需预览,请查看他的 Adob​​e课堂笔记(可在此页面上找到)。您可能还对 Adob​​e 的论文集感兴趣。

于 2009-11-27T21:17:56.880 回答
2

这是动态编程中的设计模式的链接

于 2009-11-13T09:37:00.797 回答
1

功能珍珠(Functional Pearls)不是功能编程设计模式的规范集(之一)吗?

于 2009-11-24T20:43:07.797 回答
0

Ruby 中有一个设计模式。

除了 GOF 中提到的设计模式之外,它还列出了其他一些模式,例如Convention over Configuration

于 2009-11-13T09:42:49.680 回答
0

就我个人而言,我最重要的动态语言模式——编写测试。它比静态类型语言更重要。

于 2009-11-30T22:53:34.120 回答