一、编程语言
(1)机器语言、汇编语言、中级语言、高级语言。
(2)C/C++
可对位、字节、地址直接操作
代码和数据分离倡导结构化编程
功能齐全:数据类型和控制逻辑的多样化
可移植能力强
C++面向对象语言代表
C with Classes
继承
权限控制
虚函数
多态
(3)lisp
Lisp:函数式语言代表
与机器无关列表:代码即数据
闭包
(4)JavaScript
基于原型和头等函数的多范式语言
过程式
面向对象
函数式
响应式
二、编程的规范
什么是编程规范?
(1)程序语言特性:是否允许副作用、操作的执行顺序、代码组织、状态管理、语法和词法
(2)常见的编程规范:命令式和声明式
命令式:面向过程、面向对象
声明式:函数式、响应式
(3)过程式编程:自顶向下、结构化编程
自顶向下:程序-模块-变量-数据结构
程序-模块-函数-函数-语句
结构化编程:顺序结构、选择结构、循环结构。
(4)JS中的面向过程
数据和算法
(5)面向过程问题
数据与算法关联弱
不利于修改和扩充
不利于代码重用
(6)面向对象编程
封装:关联数据与算法
继承无需重写的情况下进行功能扩充
多态:不同的结构可以进行接口共享,进而达到函数复用
依赖注入:去除代码耦合
(7)面向对象编程的五大原则
单一职责原则SRP
开放式封闭原则OCP
里式替换原则LSSP
依赖倒置原则DIP
接口分离原则ISP
(8)面向对象问题:面向对象编程语言的问题在于,它总是附带着所有需要的隐含环境。
函数式编程:函数是“第一公民”
纯函数/无副作用
高阶函数/闭包
函数式编程 First Class Function:聚合转发
Pure Function:可缓存、可移植、可测试、可推理、可并行
Currying:闭包、参数重复、之前参数存入闭包
Composition:手动组合
Functor:可以当容器的类型,类型支持对容器内元素进行操作
Monad:可以去除嵌套容器类型
Applicative:直接对两个容器进行直接操作
(9)响应式编程
异步/离散的函数式编程
数据流
操作符
过滤
合并
转化
高阶
Observable:观察者模式、迭代器模式、Promise/EventTarget超集
操作符:合并、过滤、转化、异常处理、多播
Monad:去掉嵌套的Observable
三、领域特定语言
Lexer:注释、关键字、操作符、空格、字符串、变量
Parser:上下文无关语法规则
推导式:表示非终结符到(非终结符或终结符)的关系
终结符:构成句子的毒实际内容,可以简单理解为词法分析的token
非终结符:符号或变量的有限集合。他们表示句子中不同类型的短语或子句
Parser_LR:从左到右检查 ,从右到左构建语法树
Tools、visitors。