功能,动态和面向方面编程的模式

Patterns for functional, dynamic and aspect-oriented programming

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

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

对于使用诸如python和ruby等语言的动态编程?

对于AOP?


以前有人问过一个相关的问题:"函数式编程是否会取代GOF设计模式",回答得很好。

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

例如,以下C代码

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

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

函数式编程有自己的实践,但它们与OOP中的"设计模式"有很大的不同。它们包括多态性、列表、高阶函数、不变性/纯粹性、惰性[并非所有都是FP必需的或特定的]。另见"什么是FP的核心概念"。此外,类型类(haskell)、模块和函子(ocaml)、延续、单子、拉链、指形树、单子、箭头、应用函子、单子变压器、许多纯功能数据结构(book)等。Randall Schulz已经提到的功能性珍珠,充其量构成了非常丰富的fp资源。

为了学习如何编写惯用代码,任何关于函数式编程语言的书籍/资源都足以满足imho(例如rwh和lyah);这里总是解释强制思维和功能思维之间的差异。

在动态语言中,JeffFoster的链接是一个很好的集合;这里有一个在JavaScript中非常巧妙地使用的memoization,它可以被认为是一个"设计模式"。


GoF中描述的设计模式列表是为C++和Java语言编写的。它有时被认为是一个解决方法列表,以使不灵活的语言更具动态性。例如,Ruby中并不真正需要访问者模式,因为您可以在运行时简单地更改向类中添加成员函数。如果可以使用mixin,那么decorator模式已经过时。

这是我的经验,当我在C++中实现一个解决方案时,我往往花大部分时间编写脚手架代码。我首先创建一个平台,允许我在应用程序的程序域中思考。设计模式可能是作为一种分类不同类型脚手架的方法而开发的。

我应该提到,当我用Ruby编程时,我没有太多的支持代码。似乎没有必要这样做。

我的理论是,其他语言不强调设计模式的概念,仅仅是因为它们的基本语言结构是足够的。在Java和C++的防御中,这可能是因为函数和AOP语言经常用于更具体的问题域或小生境中,而Java和C++则用于一切。

现在,为了一些不同的事情。如果你对OO设计有点厌烦,并且你想学习一些新的东西,那么你可能会对Stepanov编写的《编程元素》这本书感兴趣。在这本书中,他解释了如何从数学的角度来接近编程。如需预览,请查看他的Adobe课堂笔记(可在本页中找到)。您也可能对Adobe收集的论文感兴趣。


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


函数珍珠不是函数式编程设计模式的规范集吗?


我个人认为动态语言最重要的模式是写测试。它比静态类型语言更重要。


红宝石有一种图案。

除了在GOF中提到的设计模式外,它还列出了一些其他的模式,比如配置上的约定。