代码之家  ›  专栏  ›  技术社区  ›  Vitaliy Liptchinsky

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

  •  10
  • Vitaliy Liptchinsky  · 技术社区  · 16 年前

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

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

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

    对于AOP?

    6 回复  |  直到 16 年前
        1
  •  14
  •   Community Mohan Dere    9 年前

    之前有人问过相关问题: "Does functional programming replace GoF design patterns" ,反应非常好。

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

    例如,以下C代码

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

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

    函数式编程有自己的实践,但它们与OOP中的“设计模式”有很大的不同。它们包括多态性、列表、高阶函数、不可变性/纯粹性、懒惰性(并非所有这些都是FP必需的或特定的)。另请参见 "what are core concepts of FP" . 此外,类型类(haskell)、模块和函数(ocaml), continuations , monads , zippers , finger trees , monoids , arrows , applicative functors , monad transformers ,许多 purely functional data structures ( book 等) Functional pearls 兰德尔·舒尔茨已经提到过,在最好的情况下形成了一个非常丰富的FP资源。

    要了解如何编写惯用代码,任何关于函数式编程语言的书籍/资源都足以满足IMHO(例如, RWH LYAH )在这里,经常解释强制性思维和功能性思维之间的差异。

    在动态语言中,Jeff Foster的链接是一个很好的集合; here 在javascript中使用memoization是非常巧妙的,可以被视为“设计模式”。

        2
  •  6
  •   StackedCrooked    16 年前

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

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

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

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

    现在,为了一些不同的事情。如果你对OO设计有点厌倦,你想学习一些新的东西,那么你可能会对这本书感兴趣。 Elements of Programming 由书面 Stepanov . 在这本书中,他解释了如何从数学的角度来处理编程。要预览,请查看他的 Class notes 对于Adobe(在 this page )你也可能对Adobe感兴趣 Collected Papers .

        3
  •  2
  •   Jeff Foster    16 年前

    这里有一个链接指向 Design Patterns in Dynamic Programming

        4
  •  1
  •   Randall Schulz    16 年前

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

        5
  •  0
  •   pierrotlefou    16 年前

    有一个 Design patten in Ruby .

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

        6
  •  0
  •   orip    16 年前

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

    推荐文章