编程范式有何用?

219 阅读6分钟

前言

这篇文章是讲编程范式的,主要想阐明的是,它属于JS中语义部分的核心概念,然后通过编程范式概念引出结构化编程、面向对象编程、函数式编程这些具体的范式,和这些范式下的对象、函数、高阶函数、闭包、类、封装、继承、多态、原型、同步异步等核心概念。

正文

一门编程语言,它有语法、语义、语用三个方面的知识,语法即结构、语义即解释、语用即实践

这里的结构是静态的,解释是动态的,实践是创造的。(题外话,举个例子,这三者有点类似于康德的认识论,黑格尔的辩证法,马克思的历史唯物主义辩证法)

从现实意义角度上来看,从静态的结构,到动态的解释,再到实践的创造,是学习编程语言的三个阶段,这很马克思主义😎。

于是得出了这样的结论:

  • 在语法层面,注重结构化拆分
  • 在语义层面,注重概念的解释
  • 在语用层面,注重具体的使用

那么,如何拆分结构?如何解释概念?具体如何使用JS呢?

拿JS这门语言举例吧!

首先,在进行结构化拆分时,以什么依据进行拆分呢?

编程大师鲁迅曾经讲过一个著名的公式:程序=数据+算法

程序是由数据和算法组成的,数据是程序的输入,算法是程序的处理逻辑。

也就是说,任何程序语言,不过就是在处理数据的逻辑,那些形形色色的语法规则,其本质不过就是在处理数据的逻辑。

何谓处理数据的逻辑?换句话说,数据有哪些逻辑呢?

不难得出数据的处理逻辑有:数据的表达、数据的运算、数据的流程和数据的存储。

详情请看:《JS》

然后,怎么理解JS中的那些重要概念?

除去JS语法部分,还有很多概念是我们经常听说或使用,但往往并不能深刻理解的,比如函数、对象、类、原型、闭包、高阶函数、同步异步等等。

这些概念是怎么出现的?如何理解它们?

我发现要理解它们之前,得先搞清楚一个概念:编程范式

因为从大体上来说,一门语言的核心语义概念,跟它所能够采用的编程范式有很大关系,比如如果是面向对象编程语言,就有类、对象、封装、继承、多态的概念,如果是函数式编程语言,就有函数是一等公民、高阶函数的概念,如果是异步编程语言,就有同步异步的概念,等等。

所谓编程范式,就是不同的处理编程问题和组织代码的方法,它提供并决定了程序员对程序执行的看法。

不同的编程语言会提倡不同的编程范式,在语言创建的时候就得考虑到使用某种编程范式。

有些语言是专门为某个特定的范式设计的,如Java支持面向对象编程,而 Haskell 和 Scheme 则支持函数式编程。

最后,是我们如何使用JS的问题?

语法和语义已经涵盖了所有JS部分的理论知识,但距离真正的知识,还缺少实践。

在实践中,不仅仅会让我们对理论知识的认识愈加深刻,也会出现有关如何实践的纯粹性的实践知识,我们称为最佳实践

在面对各种各样的具体的编程场景中,涌现出的各种第三方JS库,就属于这部分的知识,还有JS的设计模式,这是一些被广泛接受的最佳实践,也属于这块知识。

综上的所有内容,作为引子,主要是引出了编程范式的语义概念,下面我们来详细看看有哪些编程范式,以及JS中使用到了哪些编程范式。

有哪些编程范式?

程序语言不断发展迭代,总体上的编程范式只有三种:结构化编程、面向对象编程、函数式编程

  • 结构化编程:强调程序应该按照结构化方式编写,即程序应该由一系列小的、清晰的、可重用的模块组成
  • 面向对象编程:程序中的数据和操作数据的方法组合成一个对象,通过对象来实现对数据的封装、继承和多态等特性
  • 函数式编程:强调使用函数(纯函数)来进行计算和处理数据,而不是通过改变状态和修改数据来实现

有些在它们基础之上构建出来的抽象层次更高的编程方法,或者针对特定场景而出现的,其实已经不能算是严格意义上的编程范式了,可以称之为编程模式了,这些模式形形色色,这里举几个例子:

  • 声明式编程:可以通过创建类和实例化对象来进行编程
  • 命令式编程:编写一系列指令,告诉计算机执行哪些操作
  • 过程式编程:将程序分解为一系列可重用的过程或函数,每个过程或函数都是独立的,可以完成特定的任务。程序的执行顺序由调用这些过程或函数的顺序决定。强调程序的结构化,使得程序更易于理解、维护和修改
  • 响应式编程:提供一种基于事件流的异步编程模型,以应对现代应用程序中的复杂性和实时性需求
  • 并发编程:允许同时处理多个任务或操作
  • 泛型编程:允许编写通用的、可重用的代码模板,能够适用于不同的数据类型和数据结构
  • 异步编程:允许程序在执行某个操作时,不必等待该操作完成,而是可以继续执行其他操作

JS符合哪些编程范式?

JS满足以上除了泛型编程之外的所有的编程范式(或模式),可以采用任何一种范式的模式编写代码,其主导范式是结构化编程、面向对象编程、函数式编程、异步编程、响应式编程,所以JS中包括了对象、函数、高阶函数、闭包、类、封装、继承、多态、原型、同步异步等等丰富的核心概念。

总结

语法以数据拆分结构,语义以各种编程范式统摄了对象、函数、高阶函数、闭包、类、封装、继承、多态、原型、同步异步等核心概念,语用以实践为原则吸纳其它实践知识,于是一幅有关JS的知识体系图像便初步形成了。