dan*_*dan 10 functional-programming clojure
我是Clojure的新手并找到了我的海腿.我想知道从功能编程的角度来看,将函数放在Clojure映射中,然后将这些映射像准对象一样传递,就像在JavaScript中经常做的那样,是否认为它是好的还是坏的.解释也将不胜感激.
由于以下几个原因,这会很糟糕:
长话短说,如果你使用Clojure做OOP,你只会生气.你可以用很多其他语言轻松地做OOP,比如说Groovy.如果你确实想使用Clojure,那么就可以使用它.
到目前为止,我写道不要这样做,为什么不这样做.现在您可能会问我:那么,我应该如何在Clojure中编写函数?
编写将您的数据结构(即地图,列表,对象......等)作为参数的函数.所以,而不是:
foo.bar();
Run Code Online (Sandbox Code Playgroud)
您可以这样定义:
(defn bar [foo]
;stuff
)
Run Code Online (Sandbox Code Playgroud)
并称之为:
(bar foo)
Run Code Online (Sandbox Code Playgroud)
现在,对于纯函数bar,foo在函数求值之后对象没有改变,如果你决定并行化你的代码,你就不必担心对象的共享状态,如果你以OOP的方式做事,你会有这种状态.
此外,它可能看起来像一个小差异,但请注意,bar函数定义是一个完全独立于数据结构的实体foo.此外,foo仅包含数据,而不包含行为 - 所有行为都在函数中.这种分离在编码时为您提供了更大的自由度.