编程范式概述
基本概念
编程范式这个名词听起来好像比较高深,但是其实本质上是它是对于程序设计风格,或者设计思路的抽象。它并不是跟编程语言是一一绑定的关系,有些编程语言Python 天生可以支持多种编程范式。
分类
从编程根本思维上的差异上区分,目前主要分成两种: 命令式(指令式)编程 和 声明式 编程
- 命令式编程:是过程导向的,告诉计算机”怎么做“,即一步一步的执行过程都需要描述清楚,计算机所有的硬件都是通过命令式编程实现的。
- 声明式编程:是结果导向的,告诉计算机”做什么“,以数据结构的形式来表达程序执行的逻辑,例如 SQL、正则表达式 就是典型声明式编程。
对开发者来说,声明式编程的思考层面要高于命令式编程,声明式语言往往通过命令式语言做底层实现
命令式编程
生活中大多数对于性能有要求或者实现细节的编程,以及相关针对执行优化算法都是属于命令式编程思维范畴, 典型的有:过程式编程、面向对象编程
- 过程式编程:很好理解C语言、汇编这种工作方式比较典型描述清楚服务执行的过程。
- 面向对象编程: 虽然形式上面向对象提供更高层次的抽象的能力(支持封装、继承、多态等),但是仍然需要关注足够多的服务细节,实际实现的过程中仍然是需要对程序模块化,需要调用过程或者方法来改变原始数据。
声明式编程
相对于命令式变成而言,聚焦于节约人力成本,不需要关注实现细节,聚焦于实现目标, 典型的有: 函数式编程、响应式编程
- 函数式编程: 是声明式的,因为它不使用可变状态,也不需要指定任何的执行顺序关系(可以假定所有的函数都是同时执行的,因为存在引用透明性,所谓的参数和变量都只是一堆符号的别名而已)Array(“bj”,“sh”,“gz”,“sz”).contains(“bj”)。
- 响应式(反应式)编程:一种面向数据流和变化传播的声明式编程范式。 例如:在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而之后改变b或c的值不会影响a。但在响应式编程中,a的值会随着b或c的更新而更新。
小结
任何编程范式都不是万能的都需要看它实际的使用场景,一般来说越接近于服务底层属于命令式居多,为了保证服务的灵活性和服务性能,而越是上层应用保证开发者研发效率,使用声明式越多。