如何在ocaml中组织大量变量

时间:2016-10-27 12:04:33

标签: functional-programming ocaml

我首先想说的是我是ocaml的初学者。所以我创建了一个简单的应用程序,从json获取数据,进行一些计算或用命令行中的arg替换其中一些,然后使用新数据写入另一个json,并在html模板中替换这些值并写入。您可以在此处查看我的项目https://github.com/ralcr/invoice-cmd/blob/master/invoice.ml

问题是如何处理这么多变量?在我知道的语言中,我可能会重复两次,但这里有6次。谢谢你的任何建议。

1 个答案:

答案 0 :(得分:2)

首先,我想注意,StackExchange code review可能是发布此类问题的更好地方,因为问题更多的是设计而不是语言。

我有两条关于如何改进代码的建议。第一个是使用字符串映射(或哈希表)来存储变量。另一个是更激进的,是以更实用的方式重写代码。

使用地图

在你的代码中,你做了大量的水从一个水桶倒入另一个水桶,而没有做实际的工作。首先想到的是,它是否有必要。将JSON定义解析为一组变量时,实际上不会降低复杂性或强制执行任何特定的不变量。基本上,您会将数据与代码混淆。这些变量实际上是您处理的数据,而不是应用程序逻辑的一部分。所以第一步是使用字符串映射,并将它们存储在其中。然后,您可以使用fold和map轻松处理大量变量。

使用功能

另一种方法是根本不存储变量,并将所有内容表达为JSON数据的无状态转换。您的应用程序看起来像一个JSON处理器,所以我真的没有看到任何理由为什么您应该先读取所有内容并将其存储在内存中,然后再生成结果。在运行中处理数据并将逻辑表示为一组小变换更为自然。尝试将所有内容拆分成小函数,以便可以轻松理解每个单独的转换。然后从较小的部分构成转换。这将是一种功能样式,其中数据流是显式的。