什么是Clojure规格?

Ert*_*tin 6 functional-programming specifications clojure clojurescript clojure.spec

我无法理解clojure的意图.规范

它解决了什么样的问题?

我们为什么要使用它?

Ale*_*ler 29

spec允许您创建数据和功能的规范.规范是它们的核心预测(基于现有的Clojure谓词)和结构,而不是基于类型,正如您在静态类型语言中看到的那样.通过基于谓词的规范,您可以编写比大多数类型系统更具表现力并使用与代码相同的语言的规范.

在函数上定义的规范指定了args的规范,返回值以及args return 的函数.最后一个允许检查比在大多数类型或合同系统中检查的更大范围的事物(容易).

定义规格后,您可以使用它们:

  • 根据规范检查值是否有效
  • "符合"一个值,为您提供值的解析和解构版本
  • 详细解释为什么值不符合规范(作为字符串,stdout或作为数据)
  • 使用描述性规范增强功能文档
  • 从规范生成示例数据
  • 在开发中断言一致性,但在生产中将它们关闭
  • 检测开发中的无效调用或测试已检测的函数
  • 为特定函数生成并运行基于属性的测试
  • 开发将仪器和测试生成与存根和模拟设施相结合的测试

您可以使用规范来改进开发(通过澄清和记录您的意图,捕获无效调用,并断言数据有效性),测试(捕获无效调用,断言有效性,生成示例数据以及为您的speceded函数生成自动测试)和您的生产(通过使用一致性进行解构).

此外,Clojure核心使用规范将导致更好的错误消息,并扩展核心库使用的开发时间检查,以便更早地发现错误.

  • 我真的很喜欢Stuart Halloway关于Clojure规范的视频:https://www.youtube.com/watch?v = nqY4nUMfus8 (2认同)

nha*_*nha 9

关于规范库的那些问题有点宽泛,尤其是"我们为什么要使用它"的一部分.你读过以下内容吗?