编程基础之编程范式
一、前言
科班出身的程序员在大学学习期间一定听过面向对象程序设计 or 面向对象编程(OOP),大学课程里的 java 和 C 语言都涉及该编程范式,如果没听过的同学,敲黑板!那一定是没好好听课。
非科班出身的程序员进入这个行业之后应该也会接触到编程范式这个概念,不管是前端还是后端,毕竟 java 和 Javascript 都涉及 OOP,今天就来介绍一下各种编程范式。
二、编程范式
百科上解释:编程范式,又称编程范型或程序设计法(英语:Programming paradigm),(范即模范、典范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格
用我们的白话来解释,就是编程范式说的就是一种编程风格,不同的编程方式决定了程序员对程序的看法,或者说是一种代码结构设计的指导思想,这种指导思想指导你设计代码结构,一种语言可以在不同的指导思想下写出不一样的编程风格。
举个栗子~:
在 OOP 编程中,如后端的 Java,前端的 Javascript,我们是不是会认为是一系列相互作用的对象。比如 FE 会说有 window 对象,location 对象,有的单身狗会说,我可以 new 一个对象(别说不是你)
在函数式编程中(FP),程序被看作是一个无状态的函数计算的序列。如果你写过递归就应该明白,FP 的主要思想就是把运算过程尽量写成一系列嵌套的函数调用。递归是其中一种特性。
下面介绍一下常见的几种编程范式:
2-1 面向对象编程(OOP)
首先介绍 OOP 范式,该范式围绕对象的概念展开,就像我们上面栗子说的那样。对象封装了数据(属性)和行为(方法和函数)。比如我们同学 new 了一个异性对象,是不是会给她定义一些属性啊:比如身高、体重、肤色、脸型。还有定义一些行为啊:比如走路、聊天、撩头发、抛飞吻对吧。常见的面向对象编程语言包括 Java、Javascript、C++、C#、Ruby 等。
2-2 函数式编程(FP)
函数式编程将计算视为数学函数的评估,强调使用不可变数据和声明式表达。JavaScript、Python 和 Scala 等语言的某些功能都支持函数式编程范式。上面栗子里我们说 FP 的主要思想是把运算过程尽量写成一系列嵌套的函数调用,看到这里不知道前端的同学有没有想到一下平时开发用到的一些方法呢。
感兴趣的前端同学可以好好了解一下函数式编程,在日常的开发中一定应用到了这种范式,FP 范式具有的特性:
- 闭包和高阶函数:FP 支持函数作为第一类对象,有时称为闭包和仿函数对象。实际上闭包是起函数的作用并可以像对象一样操作的对象,比如你在一个函数里返回了一个可调用的函数~。高阶函数可以用函数作为参数,比如 FE 回忆一下 Array 的一些方法,比如 some,filter,reduce 等等。
- 递归:用递归做控制流程的机制也是 FP 范式的特性之一,例如在处理树形结构的数据时,我们大都会采用递归~,还有比如做 1-100 的加法等~
- 函数是第一等公民:指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值
- 没有副作用:函数始终保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不修改外部变量的值,传入相同的变量永远返回相同的结果
当然还有其他的一些特点,同学们可以自己去深入的探究~这里只做简单介绍
2-3 声明式编程(DP)
声明式编程强调表达逻辑和功能,而不明确描述控制流。与命令式编程相对立。它描述目标的性质,让计算机明白目标,而非流程。申明式语言包括:数据库查询语言(SQL),正则表达式,函数式编程(不用疑惑哈,FP 是 DP 的其中一种形式)等
2-4 命令式编程(IP)
命令式编程是一种描述计算机所需作出的行为的编程典范,大部分的编程语言都是命令式的。比如编程语言中的语句,如 Javascript 中的运算语句、循环语句、条件分支语句等。
2-5 面向切片编程(AOP)
面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
2-6 反应式编程(RP)
又叫响应式编程,是一种基于观察者模式,关注于数据流 (data stream) 和 变化传递 (propagation of change) 的声明式 (declarative) 的编程范式。一种基于数据流 (data stream) 和 变化传递 (propagation of change) 的声明式 (declarative) 的编程范式。
2-7 并发编程(CP)
并发编程是 Java 中难度较高且很重要的一部分知识,涉及的知识点很多,比如多线程、锁等等
详细基础可以看这篇文章:并发编程-基础知识
2-8 范型编程(PP)
范型编程允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。泛型编程的核心思想是参数化类型,即将类型作为参数传递给代码,从而使代码可以与任意类型一起工作,而不仅限于特定的数据类型。这种编程方式可以提高代码的可重用性、类型安全性和性能,同时减少代码冗余和强制类型转换的次数。
三、收尾
作为前端开发,了解更多的是 OOP、FP,DP 和 IP 也略知一二,其余几种纯了解一下思想。这里仅梳理了一下各种编程范式,有需要进一步了解同学还请自行研究
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。