是否有任何标准文档(如UO for OO)用于函数式语言? 在下载了用erlang编写的沙发数据库并查看源代码后,我很震惊,几乎没有一行文档。 是否没有必要记录所有这些功能如何相互依赖? 是否有更好的文档中型项目可以免费学习,如何使用这种模式完成工作?
答案 0 :(得分:5)
在像Haskell或ML这样的函数式语言中,它们有类型和模块类型(在标准ML中称为“签名”),这些类型提供了大量的文档。在像Scheme这样的函数式语言中,没有编译器检查的类型,它们使用“契约”代替 - 除非它们是草率的。
Erlang是爱立信开发的,电信行业拥有非常强大的文化和测试记录。如果这些函数如何工作的文档在某个地方的测试套件中,我不会感到惊讶。
摘要:标准的两个最接近的东西是类型(对于具有静态类型系统的函数语言)和契约(对于没有静态类型系统的函数语言)。
答案 1 :(得分:4)
无论语言如何,都应记录代码。
好像有standard documentation style called EDoc。 EDoc能够生成外部API文档;引自一个消息来源:
EDoc是Erlang标准 用于记录Erlang API的应用程序 直接在Erlang代码中。
documentation section at erlang.org:
中引用了此内容EDoc允许您编写文档 一个Erlang程序作为评论 源代码本身,使用标签 形式为“@Name ...”。源文件 不必包含EDoc的标签 生成它的文档,但是 没有标签,结果只会 包含基本可用 可以从中提取的信息 模块。
focused Google search会带你离开这里。
答案 2 :(得分:3)
这是一个非常有趣的问题!
有两个问题 - 第一个是评论代码和编写一些文档(以文本形式)。这应该以OO语言中的常规方式完成。您只需编写项目中使用的所有模块,功能和类型的概述。在F#(.NET的一种函数式语言)中,您可以用与F#非常相似的方式编写XML注释,并从这些注释中生成文档。我相信MSDN上的F# documentation是从这些评论中自动生成的。以下是F#源代码的示例(如果为VS 2008安装F#,它还将安装核心库的源代码,这可能是一个有趣的资源):
/// Return the first element of the list.
///
/// Raises <c>System.ArgumentException</c> if <c>list</c> is empty
val head: list:'T list -> 'T
你提到的第二件事是UML - 没有标准来绘制功能语言的图表。这似乎是一个棘手的问题。但是,当然可以为使用某些特定库的代码创建图表。许多函数库允许您通过组合几个简单函数来编写代码。列表处理就是一个很好的例子:
let custNames = customers |> List.map (fun customer -> customer.Name)
let empNames = employees |> List.map (fun employee -> employee.Name)
let result = List.concat [custNames; empNames]
通过绘制数据流可以很好地直观地表示这一点:
+-----------+ +-----+
| customers |--->| map |\
+-----------+ +-----+ \ +--------+ +--------+
>| concat |-->| result |
+-----------+ +-----+ / +--------+ +--------+
| employees |--->| map |/
+-----------+ +-----+
类似的图纸可以用于许多功能库,它们看起来非常有用(这是你在白板讨论时所绘制的那种东西)。但是,据我所知,没有工具可以自动执行此操作(虽然应该可以恕我直言)。