Atitit 编程范式 体系树 目录 1. 编程范型、编程范式或程序设计法(英语:Programming paradigm) 1 2. 编程范式 2 3. 声明式编程体系树 3 3.1. 声明式(对
Atitit 编程范式 体系树
目录
1. 编程范型、编程范式或程序设计法(英语:Programming paradigm) 1
3.1. 声明式(对比:指令式,,主要包括 函数式,逻辑式编程) 3
5. 结构化(过程 块结构 oo)vs 非结构化(阵列编程) 5
,(范即模范、典范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照方法学)。如:函数式编程、过程式编程、面向对象编程、指令式编程等等为不同的编程范型。
编程范型提供了(同时决定了)程序员对程序执行的看法。例如,在面向对象编程中,程序员认为程序是一系列相互作用的对象,而在函数式编程中一个程序会被看作是一个无状态的函数计算的序列。
正如软件工程中不同的群体会提倡不同的“方法学”一样,不同的编程语言也会提倡不同的“编程范型”。一些语言是专门为某个特定的范型设计的(如Smalltalk和Java支持面向对象编程,而Haskell和Scheme则支持函数式编程),同时还有另一些语言支持多种范型(如Ruby、Common Lisp、Python和Oz)。
很多编程范型已经被熟知他们禁止使用哪些技术,同时允许使用哪些。例如,纯粹的函数式编程不允许有副作用[1];结构化编程不允许使用goto。可能是因为这个原因,新的范型常常被那些习惯于较早的风格的人认为是教条主义或过分严格。然而,这样避免某些技术反而更加证明了关于程序正确性——或仅仅是理解它的行为——的法则,而不用限制程序语言的一般性。
编程范型和编程语言之间的关系可能十分复杂,由于一个编程语言可以支持多种范型。例如,C++设计时,支持过程化编程、面向对象编程以及泛型编程。然而,设计师和程序员们要考虑如何使用这些范型元素来构建一个程序。一个人可以用C++写出一个完全过程化的程序,另一个人也可以用C++写出一个纯粹的面向对象程序,甚至还有人可以写出杂揉了两种范型的程序。
如果将命令式编程看作是一种“忠实的”表达(表达了就要执行,而且所表达的正是要执行的内容),那么声明式编程就是相当不老实的表达。
表达了可以不执行,甚至没法执行
声明式编程中延迟计算是一个常见的特性,它极大增加了逻辑组织结构的灵活性。比如在WebMVC架构中
现代编程语言中标配的Promise对象,它表示了未来可以获得的一个值,当我们还未真正得到这个值的时候,就可以把它作为返回值返回,并在程序中作为参数传来传去。
而在传统的命令式编程概念中,函数的返回就表示执行完毕,如果是异步执行,则只能通过回调函数获取通知,在概念层面上我们并无法直接定义和使用“未来的值”。
未来的值虽然现在未来,但毕竟未来可期。但如果根本不知道未来是否会来,那能否给它分配一个表达形式呢?
在groovy语言中,提供了类似Ruby的methodMissing机制
整个软件开发生态环境正在不断向着声明式和命令式水乳交融的方向发展。以前,为了突出声明式的部分,我们会选择模板语言,即在描述性内容中嵌入少量的命令式控制逻辑。而在今天,出现了JSX这种直接将描述性内容嵌入到命令式上下文中的技术。更进一步,类似SwiftUI这种基于通用程序语言直接实现声明式表达的技术正快步向我们走来
包括 阵列编程
在计算机科学中,阵列编程指称允许向作为整体的一组数值同时应用运算操作的一种解决方案。这种方案经常用于科学和工程上的各种场合(settings)。
- Other
- 例子[编辑]
大部分高端程序语言都期望用户进行结构化编程
后者的着名例子是Haskell
后者的例子包括 R语言 、 MATLAB 及 Perl Data Language 等
例子: Prolog
例子:OLE
例子:AspectJ
例子:Unix命令中的管道
Ref
编程范式,程序员的编程世界观 -- 简明现代魔法
什么是声明式编程 - 知乎