每天,我们都会接触到不同的编程语言,用于特定的目的。一个程序可以通过多种方式建立,以提供解决问题的方案。
但我们选择的路径与代码的时间和空间复杂性、开发时间效率,甚至与其他编码者如何轻松理解代码有很大关系。在深入探讨这个问题之前,让我们一起了解一下编程范式的含义。
什么是编程范式?
编程范式是指以语言所规定的有组织的方式编写代码的过程。每种语言都是作为解决问题的工具,并有自己独特的风格,使用编程范式。
一个程序就像一台机器。它有许多组件和零件,可以有效地工作。这在开始时似乎很好,但这种复杂性会成为你自己的敌人,同时转化为现实世界的问题,提供简单而优雅的解决方案。
计算机科学家提出了不同的方法,我们可以按照这些方法来为我们的问题陈述创建高效的代码。
现在,让我们看看现有的不同类型的编程范式。它们大体上被分为命令式范式和声明式范式,它们又被进一步细分,如下图所示。
编程范式的类型
在现代编程世界中,大多数语言都是多范式语言。一种编程语言可以使用不同范式的各个方面,从而使我们从所有范式中获得最大的优势。
例如,Python是程序性、面向对象和功能性编程范式的混合体。该语言通常使用命令式编码,但如果需要,也可以使用声明式。
现在让我们详细看看每种编程范式,了解它们是如何工作的。
命令式编程
当你去购物时,你通常在到达商场前写下你需要购买的东西的名称。类似地,这种范式由一串编程语句组成。
它们首先被执行,然后将结果存储在一个变量中。它更像是给计算机的逐行指令。
让我们用一个C++程序来理解命令式编程,这个程序给了我们一个数字的阶乘。
例子。
#include<iostream>
using namespace std;
int main(){
int fact=1;
fact*=1;
fact*=2;
fact*=3;
fact*=4;
fact*=5;
fact*=6;
fact*=7;
fact*=8;
cout<<"Factorial of 8 is : "<<fact;
return 0;
}
输出。
在这个例子中,我们给出了一个逐行的任务,由计算机用适当的指令来执行。这种类型的范式要考虑到步骤的顺序,因为不同的安排会产生不同的结果。
命令式编程又被进一步细分为程序式编程、结构式编程和面向对象编程。
程序性编程
这种编程范式遵循命令式编程的程序性调用。这些调用指导系统执行所需的任务。
每个程序或所谓的函数可以有多个命令要执行。函数一旦被定义,可以根据需要多次调用以执行相同的操作。
程序性编程被认为是最适合开始学习编码的人。初学者可以从程序性编程开始,因为它简单、高效,需要的内存少,而且更容易跟踪控制流。
一些使用程序性编程范式的语言有。
- C
- C++
- 爪哇
- Python
- 帕斯卡
在C++中的示例程序。
#include<iostream>
using namespace std;
int main(){
int fact=1;
for(int i=1;i<=8;i++)
fact=fact*i;
cout<<"Factorial of 8 is : "<<fact;
return 0;
}
输出。
结构化编程
这是一种命令式的编程范式,我们使用嵌套循环、条件语句和子程序来定义程序的控制流。
这种范式有一个自上而下的实现方式,促进了代码的可读性和重用性。在商业应用中,这有助于减少开发时间和提高代码质量。
结构化编程的缺点是,与其他范式相比,它的执行效率降低。结构化编程语言有 "过度结构化 "和丧失效率的风险。
一些使用结构化编程范式的语言是。
- Algol 60
- PL/I
- 帕斯卡
- Ada 83
- Modula
面向对象的编程
这是最广泛使用和最流行的编程范式。类、抽象、封装、继承和多态性构成了面向对象编程(OOP)的主干。
在这个范式中,程序中的每个实体都被认为是一个对象。对象可以有与之相关的数据,称为属性,并可以使用方法进行操作。
| OOP的特点 | 描述 |
|---|---|
| 抽象性 | 它有助于隐藏不必要的属性,同时显示所需的属性。 |
| 继承性 | 它有助于建立层次关系,促进代码的可重复使用。 |
| 多态性 | 它允许不同的对象以不同的方式对相同的输入做出反应。 |
| 封装(Encapsulation) | 它是将数据绑定到一个单元中。 |
描述面向对象编程的特点的表格
一些使用面向对象编程范式的语言是。
- Python
- 红宝石
- 爪哇
- C++
- Smalltalk
我已经写了一篇关于Python中面向对象编程的单独文章。如果你有兴趣的话,可以去看看。
声明式编程
声明式编程是一种表达计算逻辑而不讨论其控制流程的编程方法。程序员必须指定程序必须完成的任务,但不需要指定它必须如何实现。
换句话说,声明式编程不是在教育 "如何达到一个目标",而是集中在 "首先需要完成什么"。
主要的区别是,命令式命令告诉你如何做,而声明式命令告诉你做什么。声明式编程范式进一步分为逻辑编程和函数式编程。
逻辑编程
逻辑编程范式使用基于逻辑的语句来传达事实和规则。逻辑推断是由指令或逻辑语句来做计算的。原子语句是使用这些谓语语句建立的。
在显示相关数据的同时,逻辑语言经常依赖查询。逻辑编程的一些具体用途是自然语言处理、数据库管理、预测分析等。
一些使用逻辑编程范式的语言有。
- Prolog
- GHC
- 波尔卡
- Vulcan
- 水星
例子。
让我们来看看这句话:"吉米是一只狗。所有的狗都是杂食动物。所以吉米是一个杂食动物"。
因此,在Prolog代码中。
dog(Jimmy)omnivore(X) :- dog(X)
第一行说明Jimmy是一只狗。 :-可以被理解为如果。所以通过从右到左的阅读,"如果某物是狗,那么它就是杂食动物"。
为了测试这个程序,我们可以问Jimmy是否是杂食动物。
?- omnivore(Jimmy)
功能性编程
函数式编程是建立在数学函数之上的。它使用这些数学函数作为程序组件来解决问题。这种编程方式在处理并发性和并行性时使用。
范例算法由两部分组成:逻辑和控制。逻辑包括事实和规则,而控制则包含这些规则的顺序。逻辑规定了需要解决的问题,而控制则规定了应该如何解决的问题。
使用函数式编程的好处是,这些程序可以在多线程和多核环境中有效运行。程序员只需要指定逻辑,系统会自动找到最佳解决方案。
使用函数式编程,你可以用较少的行数实现事情。使用函数式编程也很容易进行单元测试和调试。
函数式编程的缺点是,没有for循环和while循环。相反,我们有递归的方式来迭代我们的代码。
例子。使用函数式编程的Javascript代码,打印 "Hello World "10次。
Array(10).fill("Hello World")
.map((msg) => {
console.log(msg);
return msg;
});
输出。
一些使用函数式编程范式的语言有。
- Haskell
- JavaScript
- Scala
- 埃尔朗
- Lisp
最后的思考
编程范式帮助我们降低了代码的复杂性。人们必须知道何时根据他们的问题陈述使用哪种范式。
如果你刚刚开始,你可以从过程性编程开始。之后再探索其他类型的范式。学习并将它们应用到你的问题陈述中,并检查复杂度是如何降低的。
我希望你觉得这篇文章有用。如果你有任何疑问,请在评论区告诉我。编码愉快!