ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 范畴学 范畴学(category theory)是数学中的一个抽象分支,能够形式化诸如集合论(set theory)、类型论(type theory)、群论(group theory)以及逻辑学(logic)等数学分支中的一些概念。范畴学主要处理对象(object)、态射(morphism)和变化式(transformation),而这些概念跟编程的联系非常紧密 ![](https://img.kancloud.cn/2e/9e/2e9e89eb10be4f2a172a1320c30e2ac8_687x399.png) 在范畴学中,有一个概念叫做...范畴。有着以下这些组件(component)的搜集(collection)就构成了一个范畴: * 对象的搜集 * 态射的搜集 * 态射的组合 * identity 这个独特的态射 什么是范畴 1. 一个有向图(directed graph),以节点为对象,以边为态射,以路径连接为组合也是一个范畴。 2. 定义一个实数类型(Number),以所有的实数为对象,以`>=`为态射(实际上任何偏序(partial order)或全序(total order)都可以成为一个范畴) 范畴学将在应用架构、模拟副作用和保证正确性方面扮演重要角色 ## 对象的搜集 对象就是数据类型,例如`String`、`Boolean`、`Number`和`Object`等等。通常我们把数据类型视作所有可能的值的一个集合(set)。像`Boolean`就可以看作是`[true, false]`的集合,`Number`可以是所有实数的一个集合。把类型当作集合对待是有好处的,因为我们可以利用集合论(set theory)处理类型。 ## 态射的搜集 态射是标准的、普通的纯函数。 ## 态射的组合 就是代码的组合 具体例子 ``` var g = function(x){ return x.length; }; var f = function(x){ return x === 4; }; var isFourLetterWord = compose(f, g); ``` ## identity 这个独特的态射 函数接受随便什么输入然后原封不动地返回它 ``` var id = function(x){ return x; }; ``` id 函数跟组合一起使用简直完美 ``` // identity compose(id, f) == compose(f, id) == f; // true ```