前言
JavaScript 作为一种融合了多种编程范式的语言,灵活性非常高。前端开发人员需要根据场景在不同编程范式间自如切换。进一步需要创造领域特定语言抽象业务问题。 本次课程会帮助你了解不同编程范式的起源和适用场景。掌握 JavaScript 在不同的编程范式特别是函数式编程范式下的使用。进一步帮助你掌握创建领域特定语言的相关工具和模式。
编程语言
C/C++
C:“中级语言” 过程式语言代表
- 可对位,字节,地址直接操作
- 代码和数据分离倡导结构化编程
- 功能齐全:数据类型和控制逻辑多样化
- 可移植能力强
C++:面向对象语言代表
- C with Classes
- 继承
- 权限控制
- 虛函数
- 多态
Lisp
Lisp:函数式语言代表
- 与机器无关.
- 列表:代码即数据
- 闭包
JavaScript
JavaScript:基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式*
编程范式
什么是编程范式
根据编程语言特性,可以分为:是否允许副作用、操作的执行顺序、代码组织、状态管理和语法和词法。
常见的编程范式
可以分为命令式和声明式,其中命令式包括面向过程和面向对象;而声明式则包含了函数式和响应式。
面向过程问题
-
数据与算法关联弱.
-
不利于修改和扩充
-
不利于代码重用
面向对象编程的五大原则
- 单一职责原则SRP(Single Responsibility Principle)
- 开放封闭原则0CP(Open - Close Principle)
- 里式替换原则LSP(the Liskov Substitution Principle LSP)
- 依赖倒置原则DIP(the Dependency Inversion Principle DIP)
- 接口分离原则ISP(the Interface Segregation Principle ISP)
面向对象的问题
面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。
函数式编程的优势
- 可缓存
- 可移植
- 可测试
- 可推理
- 可并行
响应式编程
具体流程为: 异步/离散的函数式编程分为数据流和操作符;而操作符又可以细化为过滤、合并、转化、高阶。
领域特定语言
什么是领域特定语言
Domain-specific language (DSL):应用于特定领域的语言,包括HTML、SQL语言等;相对的,普遍语言(General-purpose language)有C/C++、Javascript等。
Parser_语法规则
上下文无关语法规则
<selectStatement> ::= SELECT <selectList> FROM <tableName>
<selectList> ::= <selectField> [,<selectList> ]
<tableName> ::= <tableName> [,<tableList> ]
-
推导式:表示非终结符到(非终结符或终结符)的关系。
-
终结符:构成句子的实际内容。可以简单理解为词法分析中的token。
-
非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。
其他
今天的课程就到这里啦,我们下次课见!
(ps:今天你有快乐学习了吗~)