Clojure:
将代码组织成函数
如何操作:
Clojure中的函数使用defn
定义,后跟一个名字、参数和主体。这里有一个快速示例。
(defn greet [name]
(str "Hello, " name "!"))
(greet "Alex") ; => "Hello, Alex!"
现在假设我们要计算矩形的面积。我们不是将其全部混合在一起,而是将其分成两个函数:
(defn area [length width]
(* length width))
(defn print-area [length width]
(println "面积是:" (area length width)))
(print-area 3 4) ; => 面积是:12
深入了解
很早以前,编码人员会将所有逻辑糟糕地堆放在一个块中。看起来真的很糟糕。然后结构化编程出现了,函数成为了一种东西。在Clojure中,每个函数都是第一类的——你可以像处理任何其他值一样随意处理它们。
还有其他选择吗?有些人可能会研究多方法或高阶函数,但这些不过是函数炖菜中的调料。
函数的所有细节:它们在Clojure中是不可变的,这使得副作用混乱不太可能发生。它们重度依赖递归而不是典型的循环,这与该语言的函数式范式很好地融合在了一起。
另请参阅
- Clojure自己的指南:https://clojure.org/guides/learn/functions
- 函数式编程基础:https://www.braveclojure.com/core-functions-in-depth/
- Rich Hickey的讲话:https://changelog.com/posts/rich-hickeys-greatest-hits - 关于Clojure哲学的洞见。