探寻“编程范式”

206 阅读2分钟

在日常开发过程中经常接触的编程范式:Imprative,Declarative,这2个大类下,常见的有:

  • Imprative
    • oop
  • Declarative
    • fp
    • reactive

编程范式本身的定义:

Programming paradigms are a way to classify programming languages based on their features 编程范式是基于编程语言特性进行分类的一种分类方法。

所以这里有2个概念:语言特性 language features,能基于特性进行范式分类

常见的语言特性,常见:

  1. 类,多线程,手动声明释放内存,gc
  2. 多线程,强弱类型,允许声明函数,
  3. 宏定义,基本类型,原型链,指针,goto,first-class-function,不可变量,反射
  4. 闭包,装饰器,递归,数组,Map
  5. 补充:分支,循环,goto

由于OOP是一系列包含属性和方法的对象的组成,所以类是必不可少的。

一系列函数的声明和组合所构成的范式就是FP,所以声明函数和函数一等公民就不能少

在以上特性中,能做到范式区分有:类相关,函数相关。

但是这些语言的特性是如何逐步演进来的?

在今天的编程世界里,我们一开始学习的js,java,c++等一系列高级语言,都是经历过几十年,由世界的编程大师们参与,思考问题,设计,不断添加feature后才逐步演化到我们今天看到的样子。

以下2种最基本的代码编写风格为例:

// style1
fn1 => { 
 return map[op](x, y).
}

// style2
fn2 => {
 switch op{
   case: 'xxx'
     return xxx(x, y)
 }
}

大部分人基本都推崇的是第一种写法,简单,自然。但进一步思考会发现fn1里使用了高级的Map数据结构,但对于今天的编程开发者而言,这是稀松平常的一件事。

但回到语言本身,引入新的数据结构,每一个新的数据结构会造成新的认知,每新增一个概念都会解决问题并增加新负担。从分支循环上升到设计模式,再到编程范式,这些feature/模式/范式 对于今天的我们来说,这些就像公式定理一样。

但当思考现实问题,通过编程该使用何种范式去解决它时,我们首先得回顾,这些范式及范式背后的特性是如何设计出来的,理解背后的设计思想,才有可能找到最佳的解决问题的路径。