> Photo by Clément H on Unsplash
作为一个从未得到打算机科学学位的人,但是他非常激情亲切并且热切地希望它对全体编程有更多的理解,您终极会碰着不熟习的编程学科的不同障碍。 以我为例,编程中的"范式"已经成为困扰我一段韶光的话题。 学习和理解新主题的最好方法是测试自己,以教/写一篇文章/为同样试图学习的其他人制作该主题的视频。 因此,在这里,我将简要谈论编程范例。
首先,什么是范式? 范式是某种事物或模型的模式。 在编程方面,措辞支持本色上是编程方法。 换句话说,编程范例只是不同的编程风格或办法。 我们利用的范例模型还定义了编程的任务和手段。 有大量的编程范例,但是我在这里紧张是谈论两个紧张的范例,声明式和命令式。
> The principal programming paradigms by Peter Van Roy
命令式编程范例
命令式编程范例常日是普通人对程序员的意见。 这种范例中的程序员给出了打算机应如何"显式"实行的命令或命令,并且大多数情形下,打算机实行的是代码的第一行到第二行。 步骤的顺序至关主要,由于在实行操作时,给定的步骤将根据变量确当前值产生不同的结果。 韶光和状态很主要,由于它是易变的且步骤的确切细节(精度很主要)。 可以把它想象成一个时钟(韶光机器),每秒钟的指针和转盘都是韶光的问题。
另一个例子是去一家餐厅订购汉堡。 您通过命令做事员给一片汉堡吃一些中度罕有的肉来要求汉堡,炸薯条须要添加额外的盐,炸得更喷鼻香脆,生菜该当只有两片,西红柿要三批,末了加入更多的烧烤酱和 汉堡顶部的泡菜。 如您所见,统统都是精确的顺序。 考虑到这一点,命令式编程有两个紧张的子范例。
· 面向过程编程:它是一个基于例程,子例程,模块方法或函数(过程)的观点。 就像指令列表一样,它一步一步地见告打算机要做什么(程序)。 它也被称为自顶向下措辞。 大多数早期的编程措辞都是程序性的。
-编程措辞:Cobol,C,C ++,Java,Pascal。
· 面向工具编程(OOP):将所有内容都视为一个工具,将彼此通报。 它可以共享属性或行为,以及变动状态和可重用组件。 每个状态都被视为具有其状态的单独实体,状态只能通过称为方法的内置过程进行修正。 末了,它是天下上利用最广泛的范例。 很随意马虎理解和阅读。
-编程措辞:Java,Ruby,C ++,Python,Javascript。
声明式编程范例声明式编程范例是一种构建程序的样式,该程序表达打算的逻辑而无需评论辩论其掌握流程(维基百科)。 而不是见告程序"如何"而是"做什么"。 更好地理解这一点,我们可以回到在餐厅订购汉堡的示例。 这次,您只须要订购一台大型机,乃至不需提及添加汉堡的许多精确细节。 您是在见告他们要订购什么,而不是要如何订购汉堡。 由于声明式范式表示逻辑运算,因此它在数学逻辑术语中被大量利用。 声明式编程有两个紧张的子范例。
· 逻辑编程:基于系统内的数学逻辑,事实和规则(不是指令)。
-编程措辞:Prolog,ALF(代数逻辑功能编程措辞),Ciao,Alice。
· 函数编程:一种编程范例,将打算视为对数学函数的评估,避免了状态变革和可变数据。 无副浸染,调试更舒适。 它从任何参数获取一些输入,然后返回输出值(数据输入,数据输出)。 这些函数不会修正该函数范围之外的任何值,并且函数本身不受其范围之外的任何值的影响。
-编程措辞:Haskell,Kotlin,Scala,Clojure,Elm,Mercury,Javascript。
> The differences between the two programming paradigms
请把稳,某些编程措辞重叠了声明式和命令式编程范例。 个中一些措辞同时具有声明性和命令性编程范例,我们称之为多范例编程措辞。 基本上,如果编程措辞具有多个范式,我们称它们为多范式编程措辞。 但是,某些函数式编程措辞纯粹是函数式的,例如Haskell,Elm和Mercury。 有些具有两种范例,例如Javascript,Java,C ++,Scala,Python,Kotlin和Rush。
> Example of code in imperative vs. declarative programming
"命令式编程就像您做某事,而声明式编程更像您在做什么。"
没有最好的范例,这完备取决于您要完成的任务以及要办理的问题类型。 每种型号都有针对特定情形的最佳选择。 范式定义编程,就像范式可以促进科学进步一样。 作为一个社区,我们须要就特定的编程模型以及编写好的程序对我们完成任何事情意味着什么达成共识。
本文旨在简要先容编程范例。 如果您想深入理解编程范例,则该当查看这些精彩的视频和文章。
(本文翻译自Osgood Gunawan的文章《Introduction to Programming Paradigms》,参考:https://medium.com/swlh/introduction-to-programming-paradigms-aafcd6b418d6)