编程语言
C语言 【中级语言】
- 可对位、字节、地址直接操作
- 代码和数据分离倡导结构化编程
- 数据类型和控制逻辑多样化
- 可移植能力强
C++
- 继承
- 虚函数
- 多态
JavaScript
基于原型和头等函数的多范式语言
多范式代表
编程范式
程序语言特性
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 词法和语法
编程范式
-
命令式
侧重于程序员如何操作机器改变机器状态
-
面向过程
把操作用过程进行分组- 自顶向下
- 结构化编程 使用顺序结构、选择结构和循环结构代替goto
- JS面向过程
- 问题
- 数据和算法关联弱
- 不利于修改和扩充
- 不利于代码的重用
-
面向对象
根据操作和它对应的状态进行分组,外部不能直接操作数据项,限制数据的访问- 封装
- 继承
- 多态 不同的结构可以接口共享,进而达到函数复用【覆盖基类的接口】
- 依赖注入 不用在类定义时创建对象,而是使用依赖注入方式。耦合特定实现->声明依赖 声明实现 得到注入对象【Inversify.js | Nest.js】
- 五大原则
- 单一职责原则
- 开放封闭原则
- 里氏替换原则
- 依赖倒置原则
- 接口分离原则
- 问题 无法进行细功能的功能导入
面向对象编程语言的问题在于,他总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。 --Joe Armstrong
-
-
声明式
声明想要的结果而不是操作【声明“我需要什么”而不考虑如何得到】SQL就是声明式的语言
-
函数式编程【ramdajs】
通过一系列的函数声明逻辑,尽量减少变化的部分,使代码逻辑更清晰
- 聚合转发 一等函数
- 纯函数【不依赖外部环境,不应该修改参数,通过返回新对象表达函数功能】
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
- Currying 【闭包,高阶函数】
- 使用函数组合【手动组合/自动组合(数据从右往左流入,处理后返回)】
- 交换律
- 结合律
- Functor
不用考虑异常情况 将特殊情况的处理封装至容器中
- Array
- Promise
- Monad
- 去除嵌套容器的容器类型
- Array.flatMap Promise.then
- Applictive
- 直接对两个容器直接操作
-
响应式
通过数据流和映射函数表示结果,没有纯粹的响应式编程语言,需要借助工具库(RxJS)
- 数据流
- 操作符
- 合并
- 过滤
- 转化
- 异常处理
- 多播
- Observable Promise EventTarget 超集
- Monad
-
领域语言
-
语言运行
- 词法解析
- token分类
- 语法解析
- 语法规则(推导式)
- LL 从左到右检查 从左到右构建语法树
- LR 从左到右检查,从右到左构建语法树
- 遍历语法树【执行或转换成其他语言(编译)】
- 词法解析