Where could I find a good example of implementing a system in functional vs OO style
我已经开始尝试Clojure了,它所能做的让我印象深刻。但是,我认为我没有真正的"有"功能编程设计。我的背景是Smalltalk,这是我对设计的看法。我想真正了解FP与OO的区别,一种方法是对解决方案进行良好的并行比较。
我认为问题不需要那么复杂。也许这足以说明FP将如何实现典型的银行账户问题?
有人知道合适的资源吗?
我认为大多数关于Clojure的书都会有类似于一个简单的银行账户程序的东西,我把它看作是一个小数据库,在这个数据库中状态会得到更新。例如,Halloway和Bedra的程序Clojure有一个跟踪音乐录音的程序。当您阅读该程序的描述时,您将立即看到如何将其映射到OO解决方案中。但是,我不认为你会从这样一个简单的例子中"得到"FP。编程clojure也有功能性的蛇游戏。你可以把它比作一个OO蛇游戏。(我不是在推广Clojure编程;这是一本有价值的书,但我认为它有一些缺陷。正好是我最熟悉的法律法规书。不过,很多人似乎都喜欢。)
我建议另一个策略,也许是对你的补充,去摸索FP:读一些让你沉浸在FP世界观中的介绍性文章。我最喜欢的是弗里德曼和费雷森的小阴谋家。它使用的是方案,而不是clojure,但思想是可以翻译的。有一个clojure网站专门为它服务,但我建议按照它推荐的方式来阅读原著,在你阅读的过程中覆盖部分页面。我认为这本书让我了解了FP的一些部分,这些部分超越了小阴谋家,扩展到了你在Clojure世界所发现的大部分内容,是Bird使用Haskell介绍函数编程的。不过,我觉得推荐哈斯克尔的书很有趣。为什么不写一本法律诉讼书呢?好吧,也许其中一本《Clojure》的书会有同样的效果,用FP的思维方式给你一个纯粹的洗礼,但是我读过的《Clojure》的书(P.C,《Clojure的欢乐》)虽然非常好,但不知何故没有那么引人入胜——也许是因为它们更实用。另一方面,P.C(可能还有其他一些Clojure书籍)主要面向面向面向OO程序员,所以这可能正是您想要的。
从小说家的角度对Clojure的一些随机观察。
- Clojure数据结构将提醒您Smalltalk的集合类,但是不可变/持久性需要一点适应。
- 您已经使用
do 及其亲属来缩写控制结构。你会发现序列库(map 和reduce 以及其他的库)的懒惰为你提供了另一个级别的权力和简洁。 - 你已经习惯了把代码写成小块。这些碎片会变小,而且会有更多的碎片。
但是
- clojure不如smalltalk纯净:并非所有事物都是对象。
- 没有什么比完美的Smalltalk浏览器更标准的了。
如果你喜欢闲聊,你会喜欢Clojure的。