[ 编程方式 | 青训营笔记 ]

107 阅读2分钟

背景

前端的主要编程语言是JavaScript,它融合了多种编程范式,灵活性高。开发人员需要根据场景在不同编程范式间切换,要创造领域特定语言抽象业务问题

编译语言

机器语言

老师举例8086机器语言是操作码+操作数

注:8086是指Intel 8086,是x86架构的鼻祖,1978出的,我没用过

编译语言

原理

字母代替操作码的数字,方便输入和检查;且相同的字母在不同机器可以转换成不同的数字,提高可移植性

高级语言

进一步贴近自然语言,进一步提高可移植性,高级语言通过编译器转换成汇编语言

例子:C语言(面向对象)、Lisp(函数式)、JavaScript(多范式语言)

总结

image.png

编程范式

分类

image.png

命令式

面向过程

  • 自顶向下      程序→模块→(变量、函数)
  • 结构化编程   顺序结构  选择结构  循环结构

面向过程缺点

  • 数据与算法关联弱
  • 不利于修改和扩充
  • 不利于代码重用

面向对象

  • 封装   把变量和函数关联起来,用户使用时只要引用封装就行
  • 继承   一个对象继承父对象的变量和函数,不需重写即可进行功能扩充
  • 多态   接口可供多个结构引用,就是函数复用
  • 依赖注入  不在结构内主动创建对象,降低耦合性,同时可以用构筑器、接口等注入依赖,让结构内能使用对象的功能

五大原则

  • 单一职责原则:一个对象结构只负责一两个功能,不能搞太复杂来降低效率
  • 开放封闭原则:对拓展功能开放,对修改内容封闭
  • 里式替换原则:子对象继承父对象
  • 依赖倒置原则:把高层对细节实现效果的依赖转换成高层对内部接口的依赖,内部接口再由细节实现
  • 接口分离原则:细化接口,接口任务单一,不要臃肿,与单一职责原则有点相似

面向对象缺点

课上老师用了一个抽象的例子说明,你引用一个对象的函数,就好比你要一根香蕉,结果却得到了一个拿着香蕉的猴子和猴子所在的林子,我理解是面向对象容易牵一发而动全身

声明式

函数式编程

  • First Class Function
  • Pure Function
  • Currying
  • Composition
  • Functor
  • Monad
  • Applicative

响应式编程

image.png

领域特定语言

语言运行

image.png

Lexer词法分析

image.png

Parser语法解析

语法规则 生成语法树

Tools

用工具箱,比如数学什么的

visitor

执行

DSL总结

学习编译原理