是否有像面向对象的UML一样的标准文档适用于函数式语言? 下载了用Erlang编写的CouchDB并查看源代码后,我感到震惊,几乎没有一行文档。 这些函数之间的依赖关系不需要记录吗? 是否有更好的中等规模项目可供免费学习,以了解如何使用这种范例?
是否有像面向对象的UML一样的标准文档适用于函数式语言? 下载了用Erlang编写的CouchDB并查看源代码后,我感到震惊,几乎没有一行文档。 这些函数之间的依赖关系不需要记录吗? 是否有更好的中等规模项目可供免费学习,以了解如何使用这种范例?
无论使用哪种语言,代码都应该有文档记录。
似乎有一个名为EDoc的标准文档风格。 EDoc能够生成外部API文档; 引用一种来源:
EDoc是Erlang标准应用程序,可在Erlang代码中直接记录Erlang API。
这在erlang.org的文档部分中被引用:
EDoc允许您将Erlang程序的文档编写为源代码中的注释,使用形式为“@Name ...”的标记。源文件不必包含EDoc的标记即可生成其文档,但是如果没有标记,则结果将仅包含可以从模块中提取的基本可用信息。
一个专注的 Google 搜索将带您离开这里。
这是一个非常有趣的问题!
有两个问题 - 第一个是对代码进行注释并编写一些文档(以文本形式)。这应该像OO语言中那样进行。您只需编写有关项目中使用的所有模块、函数和类型的概述即可。在F#(一种用于.NET的函数式语言)中,您可以以与F#类似的方式编写XML注释,并从这些注释生成文档。我相信MSDN上的F#文档是从这些注释自动生成的。以下是来自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
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 |/
+-----------+ +-----+
类似的图表可以用于许多功能库,它们似乎非常有用(当您在白板上讨论某些事情时,这是您绘制的类型)。然而,据我所知,目前没有自动完成此操作的工具(尽管我认为这应该是可能的)。