编程范式 | 青训营笔记

41 阅读2分钟

引入

作为一名光荣的前端开发人员就是有点费肝,需要根据场景在不同编程范式间自如切换。进一步需要创造领域特定语言抽象业务问题。 本次课程会帮助你了解不同编程范式的起源和适用场景。掌握 JavaScript 在不同的编程范式特别是函数式编程范式下的使用。进一步帮助你掌握创建领域特定语言的相关工具和模式。

1. Javascript

是一种当之无愧的“基于原型和头等函数的多范式语言”

其具有:

  • 过程式
  • 面向对象
  • 函数式
  • 响应式

的特点

image.png

2.编程范式简介

image.png

按照程序的语言特性可以分为以上几个类别。依据这些类别我们可以具体区分一些编程范式:

image.png

什么是自顶向下的程序

image.png

面向过程式的编程有什么缺陷?为什么回出现面向对象编程?

面向过程具有以下三个问题:

  • 数据和算法关联度弱(程序一大就容易变得可读性很差)
  • 不利于修改和扩充
  • 不利于代码复用

3.面向对象编程

具有以下四个特点:

  • 封装
  • 继承
  • 多态
  • 可以作为依赖注入

我们把客观的事物封装成一个类,类下面有许多相关算法可以进行直接调用。

image.png

因此,数据和算法就具有了比较强的相关性

image.png

类的继承让我们更方便地完善它。

多态实现函数复用 image.png

此外类似Python的第三方库引入,js也可以引入依赖:

image.png

简单介绍面向对象编程五大原则

  • 单一职责原则
  • 开放封闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口分离原则

看上去面向对象编程似乎万无一失了?此时我们思考一下面向对象编程有什么缺点?

面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。—— Joe Armstrong

说白了我就想要一个功能,但是我却把整个依赖下载下来了。

4. 函数式编程

用纯函数的组合来描述并解决问题

image.png

函数式编程的优势是:

  • 可缓存
  • 可移植
  • 可测试
  • 可推理
  • 可并行

5.响应式编程

异步、离散的函数式编程

当一个系统具有即时响应性(Responsive)、回弹性(Resilient)、弹性(Elastic)以及消息驱动(Message Driven)。 我们称这样的系统为反应式系统(Reactive System)。