编程范式 | 青训营笔记

107 阅读4分钟

编程范式

本文章将会分成三个部分来围绕编程范式进行介绍,分别是编程语言,编程范式,领域特定语言。

第一点 编程语言

编程语言经过多年的发展,从最初的二进制语言即机器语言,发展到目前的高级语言,逐渐的消除人类编程的难度。

1.机器语言

从第一台“计算机”——杰卡德织布机,而得到编程的灵感一直影响到了现在,以前的织布机可以把图案像程序一样打印在布料上,而现在人们可以通过一些硬件的开关操作做出同样甚至更为复杂的操作,通过简单的0或1便可控制计算的进行。

2.汇编语言

时间久了,人们发现老是用二进制来输入太繁琐了,一个程序可能需要打出成百上千的0、1,工作量大,而且不容易被人理解。于是,第一种便于被人类理解的语言——汇编语言,就出现了。汇编语言的出现在当时来看,降低了部分程序员的门槛,可以给行业带给更多有关的人才,而且和机器语言相比,汇编语言的代码行数少了许多,更加简洁,当然与现在的一些语言还是不能相比的。

3.中级语言

再过了几十年后,新语言出现了,而且是编程语言的一个里程碑,并且产生了一种新的编程方式——面向过程编程,这种语言的代表就是C语言。C语言作为新时代大学生必学的一门课程,可见其对现在乃至于未来的编程都是至关重要的,C语言就像所有高级语言的基础。

4.高级语言

高级语言中又产生了三个分类——面向对象编程、函数式编程、多范式编程,而它们的代表则是大家比较熟悉的C++/Java、lisp、JavaScript。三个代表目前已经被各种各样的公司运用。

第二点 编程范式

前面大体介绍了一下编程语言的分类,现在来正式说一下本文的重点——编程范式。首先编程范式分为两大类,为命令式和声明式,而他俩又可分为面向过程、面向对象,函数式、响应式四种类型。

1.面向过程

过程式采用自顶向下、结构化的编程,每一步都要一步一步的往下走,而且一旦要修改某个数据,就需要重新修改之前所编写的代码,导致其数据与算法的关联性弱,并且不利于修改和扩充;其次,由于其结构化的编程方式,通过过程式编程的代码的重用性差。于是过程式编程在目前来说,应用的方面较少,大多用在一些长时间不用修改代码的场景中。

2.面向对象

面向对象编程在面向过程的基础上产生了许多新的概念,比如封装、继承、多态、依赖注入等。封装加强了数据与算法的关联性;继承,我觉得是最重要的一点,它在不需要重写的情况下就可以进行功能的扩充,极大的提升了代码的重用性,节省了许多编写代码的时间;多态的意思是不同的结构可以进行接口共享,进而达到函数复用;而依赖注入则是去除了代码耦合。但是,面向对象编程有个问题,它总是附带着所有它需要的隐含环境,而且这个是必须的,相当于“爱屋及乌”,爱TA,你就要接受TA的一切,家庭、朋友等等一堆。但这种编程方法的利还是大于弊的。

3.函数式编程

直接说优点,可缓存、可移植、可测试、可推理、可并行,五大优点。

4.响应式编程

相当于异步/离散的函数式编程,相当于函数式编程的2.0版。
为什么最后两个的编程说的这么少呢?因为这两种编程很少接触,本人也是第一次知道,不太了解,所以也不敢多说,怕误导读者。还请大家见谅

第三点 领域特定语言

什么是领域特定语言?Domain-specific language(DSL)是应用于特定领域的语言,比如说HTML,SQL等。\

创造DSL的四个步骤,lexer,parser,tools,visitor

1.lexer

lexer由五部分组成:关键字、操作符、空格、字符串、变量,如果有必要的话可以加上注释。

2.parser

parser是一种语法规则,中文意思为上下文无关语法规则,一共有两种方式,第一种是LL,从左到右检查并构建语法树,第二种是LR,从左到右检查,但是从右到左构建语法树

3.tools和visitor

两个分别是编程的语句,具体算法具体分析吧。\

附录:

函数式编程:

创建DSL parser工具: