|
|
1
14
之前有人问过相关问题: "Does functional programming replace GoF design patterns" ,反应非常好。 在FP中,“设计模式”的等价物非常模糊。一般来说,每次在代码中看到一个“模式”时,都应该创建一个以统一的方式覆盖其所有用途的东西。它通常是一个高阶函数。 例如,以下C代码
可以考虑一些基本的“设计模式”——检查列表中是否有一些特殊的元素。此代码段可能在具有不同条件的代码中出现多次。在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
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
这里有一个链接指向 Design Patterns in Dynamic Programming |
|
|
4
1
函数珍珠不是函数式编程设计模式的规范集吗? |
|
5
0
有一个 Design patten in Ruby . 除了gof中提到的设计模式外,它还列出了其他一些模式,比如 Convention over Configuration . |
|
|
6
0
我个人认为动态语言最重要的模式是写测试。它比静态类型语言更重要。 |