编程范式| 青训营笔记

61 阅读2分钟

编程范式

编程语言

人类语言和机器语言。数字--汇编语言--高级语言(编译器作为中介)\

  • C语言
    • 中级语言,过程式语言代表
    • 可对位、字节、地址直接操作
    • 结构化编程
    • 功能齐全
  • C/C++
    • 面向对象语言代表
    • 继承
  • Lisp
    • 函数式语言
    • 与机器无关
    • 列表即数据
  • JavaScript
    • 基于原型和头等函数的多范式语言
    • 过程
    • 面向对象
    • 用于网站开发,服务器的开发,引擎的嵌入

image.png

编程范式

程序语言特性

  • 是否允许副作用
  • 操作的执行顺序
  • 代码组织
  • 状态管理
  • 语法和词法 eg:命令式:面向对象;面向对象。 声明式:函数式、响应式。\

过程式编程

  • 自顶向下
  • 结构化编程
    • 顺序、选择、循环
      面向过程的问题:
      数据算法弱、不利于修改和扩充、不利于重复使用\

面向对象编程:

  • 封装
    • 关联数据与算法 操纵逻辑形式
  • 继承
    • 无需重写的情况下进行功能扩充
  • 多态
    • 不同的结构可以用接口共享,从而重复使用函数
  • 依赖注入(高级)
    • 去除代码耦合(控制反转)。声明依赖、声明实现,得到注入对象。无需直接改变类。
  • 五大原则
    • 单一职责原则SRP
    • 开放封闭原则OCP
    • 里式替换原则LSP
    • 依赖倒置原则 DIP 具体依赖抽象 定义一个抽象接口
    • 接口分离原则ISP 不要依赖具体门类的实现
  • 缺点
    • 总是附带有所有它需要的隐含环境

函数式编程

  • 用纯函数的组合完成编程,ramada:可用函数描述的问题是可计算的
  • 特点
    • 高阶函数
    • 函数是第一等公民
      • eg:聚合转发
    • 纯函数:不应该有副作用,不改变参数值
      • 可缓存、可移植、可测试、可推理、可并行
    • Currying
      • 去除参数重复的问题,利用了闭包和高阶函数的特性
    • Composition
      • 不用手动组合
    • Functor
      • 当作容器的类型,支持对容器内的元素进行操作 -functor:array(lterable).map.Promise.then
    • Monad
      • 可以去除嵌套容器的容器类型 - monad:Array.flatMap Promise.then
    • Applicative
      • 直接对两个容器操作

响应式编程

  • 异步/离散的函数编程
    • observable
      • 观察者模式
      • 迭代器模式
    • 操作符 compose
      • 操作符构成数据管道
    • Monad
      • 去除嵌套的Observable

image.png

领域特定语言

DSL:比如HTML、SQL,与C和Java script为代表的general- purpose相对。
Parser_LL、Pareser_LR

image.png