声明式纯函数投影之美
1. 引言
纯函数式编程已被证明适用于各种编程任务,包括具有命令式风格的任务,如输入输出操作。本文聚焦于纯函数最自然的应用场景,即处理信息系统中的信息值。信息系统通常处理存储、接收或生成的信息,目标包括查看信息、更新存储信息以及推导新信息等。本文将探讨如何使用纯函数投影来声明式地表达从现有信息获取新信息的知识。
函数具有一些重要特性,使其能够像拼图的碎片一样完美融入系统,实现关注点分离。这些特性包括:
- 右唯一性 :每个输入仅对应一个输出。在大多数信息系统中,当没有歧义或不确定性时,将给定输入状态映射到单个输出是很自然的。例如,为用户提供当前信息状态下的单一视图,或根据更新请求和当前信息状态确定唯一的新信息状态。不过,函数也可通过将输入映射到可能输出的集合来表示非确定性和不确定性。
- 全函数性 :对于所有可能的输入都有输出。定义用于从现有信息推导新信息的函数时,必须确保对现有信息的所有可能状态都能产生输出,否则系统整体行为可能变得未定义。强类型系统在定义全函数时非常重要,它能帮助指定输入集,让使用者了解可能的输入,并对函数定义进行静态检查。
- 输出类型的重要性 :虽然输出集由输入集和函数定义隐式确定,但为函数指定输出类型也很关键。因为函数的使用者会将其与其他函数组合,只有当函数的输出与组合函数的输入匹配时,才能保证系统行为的唯一性。部分函数可通过使用 Maybe 类型作为输出转换为全函数,这需要显式处理 Nothing 情况。本文假设所有函数在其类型上都是全函数。
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



