Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【2023.3.8】编程范式 #77

Open
lkzwc opened this issue Mar 8, 2023 · 0 comments
Open

【2023.3.8】编程范式 #77

lkzwc opened this issue Mar 8, 2023 · 0 comments

Comments

@lkzwc
Copy link
Owner

lkzwc commented Mar 8, 2023

编程范式

分为 Imperative Programming 命令式编程 和 Declarative Programming 声明式编程

  • 命令式编程:关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。
    • 过程式编程(Procedural programming )以 C 为代表
    • 面向对象编程(OOP)以 Java 为代表。
  • 声明式编程:告诉计算机应该做什么,但不指定具体要怎么做。以数据结构的形式来表达程序执行的逻辑。
    • 函数式编程(FP)
    • 和逻辑编程
      函数式编程之前比较小众,近些年来在前端圈开始流行,实际上它的历史比面向对象还要早。逻辑编程代表是 Prolog,使用逻辑学逻辑运算来做,写法有点像自然语言。诞生与 1972 年,历史悠久,在人工智能和数据库上有一些应用,目前已经不再流行。

OOP 和 FP 区别

OOP 使用 mutable 可变的数据结构,操作简单,缺点是不擅长处理并发。由于并发场景代码在任意时间执行任意指令,导致程序的顺序性无法保证,造成 bug,需要用到同步机制和加锁。
FP 追求纯函数无副作用,share nothing 无共享的设计,所以不依赖函数的执行顺序,擅长并发调用,完全没并发异常的问题

驱动类型

事件驱动:

关注操作和响应,基于流程实现编码

  1. 开发静态界面
  2. 绑定事件
  3. 实现绑定的事件
  4. 触发事件、逻辑操作

数据驱动:

关注数据和数据的变化,基于状态实现编码

  1. 抽象设计 将界面中变的和不变的分开,对变化的进行抽象,抽象结果设计数据结构
  2. 修改状态的方式
  3. 实现静态界面绑定事件

语言类型

编译性语言(C++\java)

在代码运行前编译器将代码转化为机器码,运行时候直接使用,不需要再次编译

解释性语言(JS)

在运行的时候将代码转化为机器码使用,弱类型语言=>在运行的时候才能确定其类型
目前的TS只是增加了编译时候的类型检测

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant