编程范式
Lisp:函数语言代表与机器无关,列表:代码即数据和闭包。
编程范式有命令式(包含面向过程和面向对象)和声明式(函数式和响应式)。过程式编程自顶向下和结构化编程。
在面向过程式编程中会出现:数据与算法关联弱,不利于修改和扩充以及不利于代码重用的问题,其的步骤为:封装、继承、多态和依赖注入。封装式将数据与算法关联起来,继承时无需重写的情况下进行功能扩充,不同的接口可以进行共享,进而达到函数复用,在依赖注入的过程在要去除代码耦合。其五大原则:单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则和接口分离原则。面向对象编程语言的问题在于其总是附带着所有需要的隐含环境。而函数式编程的优势在于:可缓存、可移植、可测试、可推理以及可并行。
函数式编程中functor可以当作容器的类型、类型支持对容器内元素进行操作,常见的functor:Array(lterable)、map、Promise、then;Monad可以去除嵌套的容器类型,常见monad:Array、flatMap、Promise、then;Application直接对两个容器直接操作,identity:Maybe(id).ap(v)===v;
Homomorphism:Maybe(f).ap(Maybe(x))===Maybe(f=>f(x)).ap(v);Interchange:v.ap(Maybe(x))===Maybe(f=>f(x)).ap(v);Composition:Maybe(compose).ap(u).ap(v).ap(w)===u.ap(v.ap(w)).
响应式编程Observable包含观察者模式,迭代器模式和Promise/EventTarget超集。其操作符包含合并、过滤、转化、异常处理和多播。响应式编程Monad时未来去除嵌套的Observable,SQL Token分类为:注释、关键字、操作符、空格、字符串和变量。