编程范式的进化

过程式

过程式就是以一条条命令的方式,让计算机按照我们的意愿执行。过程式编程中最核心的两个概念是结构体(自定义的类型)和过程(也叫函数)。通过结构体对数据进行组合,可以构建出任意复杂的自定义数据结构;通过过程可以抽象出任意复杂的自定义指令,复用以前的成果。

函数式

函数式本质上是对过程式编程的一种约束,它最核心的主张就是变量不可变,函数尽可能没有副作用(对于通用语言来说,所有函数都没有副作用是不可能的,内部有IO行为的函数就有副作用)

函数式编程相对小众,因为这样虽然代码质量高,但是学习成本也高。比如:在过程式编程中数组是一个最常见的数据结构,但是再函数式中因为变量不可变,对某个下标的数据元素的修改,需要复制整个数组,非常低效。

面向对象

面向对象在过程式的基础上,引入了对象和对象方法,主张尽可能把方法归纳到合适的对象上,不主张全局函数。

面向对象的核心思想是引入契约,基于对象这样一个概念对代码的使用界面进行抽象和封装。他有两个显著的优点:一是清晰的使用界面,某种类型的对象有哪些方法一目了然;二是信息的封装,对象只暴露必要的接口和外界交互,内部的实现细节和外部解耦。