编程语言
- 机器语言
- 汇编语言
- 中级语言:面对过程代表 eg:c
- 高级语言
- 面向对象代表 eg:c++
- 函数式代表 eg:lisp
- 多范式代表 eg:javascript
编程范式
命令式
面向过程,面向对象
过程式编程
- 自顶向下
- 结构化编程
- 面向过程问题:
- 数据与算法关联弱
- 不利于修改和补充
- 不利于代码重用
面向对象编程
- 封装
- 多态
- 继承
- 依赖注入
- 面向对象编程的五大原则:
- 单一职责原则
- 开放封闭原则
- 里式替换原则
- 依赖倒置原则
- 接口分离原则
面向对象 vs 函数式
面向对象编程
- 优点:面向对象编程通常使用命令式的编码风格,声明式(declarative style)的用得比较少。这样的代码读起来,像是一组直接的、计算机很容易就能遵循的指令。
- 缺点:面向对象编程往往需要共享状态。对象及其行为常常会添加到同一个实体上,这样一来,如果一堆函数都要访问这个实体,而且这些函数的执行顺序不确定的话,很可能就会出乱子了。 函数式编程
- 优点:用函数式范式来编程,就不需要担心共享状态或者副作用了。这样就避免了几个函数在调用同一批资源时可能产生的 bug 了。拥有了“无参风格”(隐式编程)之类的特性之后,函数式编程就大大简化了。
- 缺点:代码如果过度利用了函数式的编程特性(如无参风格、大量方法的组合),就会影响其可读性,从而简洁度有余、易读性不足。
声明式
函数式,响应式
函数式编程
- 函数是第一等公民
- 纯函数/无副作用
- 高阶函数/闭包
响应式编程
异步/离散的函数式编程
- 数据流
- 操作符:
- 过滤
- 合并
- 转化
- 高阶
观察者模式
迭代器模式
Promise/EventTarget超集