有没有Clojure原则?

Bel*_*lun 19 functional-programming principles clojure

  1. Clojure有什么原则吗?

    一个.像Java这样的OO语言的SOLID面向对象设计原则

    湾 或者其他更具启发性的,比如"告诉不要问","赞成组合与继承","与接口交谈"?

  2. 是否有任何设计模式(灵活的代码)?

  3. 功能编程基础的对应部分是什么,比如面向对象的封装?

知道这些资源吗?

Isa*_*aac 26

对你的第一个问题:不.

Clojure可以帮助您正确,快速,愉快地完成工作.之后的一切都是肉汁.

并且有很多肉汁.我不认为知道Clojure的方式,即使有一个,但这里有一些指导我已经被告知并在Clojure写作时发现:

  1. 首先,让一些工作.然后,您可以根据需要进行检查,测试和优化.还有一个原因是,time宏是核心语言.速度之前的正确性,可爱.

  2. 抽象.如果你在重复自己,那么你可能做得不对.撰写,咖喱和组合功能.

  3. 从你的逻辑中分离出副作用.例如,如果您想格式化并保存字符串,请将其格式化为一个函数,然后使用另一个函数来保存它,但是您需要.

3A.不要为此过于疯狂.有时候,拥有一些匿名函数比使用乱码的一行更好defn.

  1. 测试.Rich给了你一个REPL是有原因的; 使用那个REPL的地狱.

  2. 不要混淆你的命名空间.在Clojure-land我们很干净.鉴定您use的资格或使用:only您需要的资格.使您的代码可读.

  3. 了解核心库.不只是clojure.core,但clojure.java.io,clojure.string,clojure.set和之间的一切.如果您认为Clojure应该具有执行X的功能,那么它可能会这样做.您可以使用apropos(来自,是的,另一个核心库:) clojure.repl.

  4. 记录您的代码.Docstrings是一件美丽的事情.如果你有一种冗长的倾向,那么doctsring就是放松的地方.但是,也要知道好的代码经常"记录自己".如果代码是不言自明的,就没有必要迂腐.

  5. 这是一种功能语言.如果可以,请使用功能.协议,宏和记录都很棒:但是当你可以逃脱它时,使用一个函数.您可以编写,组合,映射,缩小,迭代(列表继续,开启,开启......)功能.这是非常好的.

  6. 最重要的是,如果有意义的话,请违反上述规则.但要准备好重新思考和重构.如果您保持代码模块化,那么重构代码应该是重组和重组的问题.

其他一些提示:阅读其他人的代码.如果你开始阅读代码,并且善于阅读代码,你就会更好地编写自己的代码,并且你也可能会学习新东西:只有一种方法可以做到所有事情.

最后,阅读Clojure Library Coding Standards,了解生产Clojure代码的预期结果.

†至少,还没有.


Nic*_*ury 8

难以回答的问题.

Clojure非常灵活.所以它们是最佳实践,但它们并不像java那么重要.

我在这里写了一些从最一般到最特殊的家庭的建议的例子.

一般来说,编程都有建议:编写大量测试,编写正确和好的内容,在需要时进行配置和优化

有函数式编程的建议:编写小函数,编写纯函数,组合小函数,通过函数考虑代码,尽可能使用组合器...

有LISP的建议:使用宏来分解重复模式,自下而上构建程序.(请参阅保罗格雷厄姆的'关于LISP'以获得比我更好的解释)

还有一些专门针对Clojure的建议:按照对状态和身份的仔细分析(http://clojure.org/state,以获得非常好的解释),尝试尽可能使用seqs及其函数,为函数编写doc字符串

更多建议的良好来源是Clojure Library Coding Standard http://www.assembla.com/wiki/show/clojure/Clojure_Library_Coding_Standards

但是所有这些建议都只是建议,Clojure可以被不想遵循这些建议的人使用,因为作为Lisp,它非常灵活.

就设计模式而言,功能程序员很少用这些术语来思考,因为它们中的大多数都是针对OO语言而设计的,并不适用于函数式语言.

Peter Norvig有关于Design Pattern和LISP/Dylan的有趣幻灯片:http: //norvig.com/design-patterns/

希望有所帮助.


nic*_*kik 3

1a)我不知道有类似的事情,但是每本关于 FP 的书都会做类似的事情。

1b)

  • “偏好组合 vs 继承” --> 已经被处理了,因为你是从 FP 开始的

  • “与抽象交谈”--> 更一般

  • “能偷懒的时候就偷懒”

  • “避免状态”

  • “使用纯函数!!!”

  • 项目清单

....

2.) 您可以使用一些相同的设计模式,它们只是更容易实现。其中一些意义不大,但通常是这样。FP 的人不会小题大做。(这是关于 GoF 模式的,我只知道它们)

例如,看看观察者模式。在 Clojure 中,您可以使用 add-watcher 函数来废弃观察者模式。

3.)您可以在名称空间中使用封装(查看 defn-),或者您可以将您的函数隐藏在其他函数中。《Clojure 的乐趣》中有一些例子。您可以将其推至任意远的位置。