函数式编程初探引发的思考

在了解Spring 4.X时,作者提到Spring 4.X全面支持Java 8.0的Lambda表达式。开始初步了解函数式编程,说到其是一种编程范式,由此而联想到语言及程序设计思想,他们之间的区别和关系是什么,特此做了以下梳理。

一、什么是编程范式

所谓编程范式,指的是计算机编程的基本风格或典范模式,是如何编写程序的方法论。借用哲学的术语,如果说每个编程者都在创造虚拟世界,那么编程范式就是他们置身其中自觉不自觉采用的世界观和方法论。如果把一门编程语言比作兵器,它的语法、工具和技巧等是招法,它采用的编程范式则是心法。

二、有哪些编程范式

主要的编程范式有三种:

1.命令式编程

告诉计算机先做什么再做什么,即如何做事情,不管你想要的是什么;不管你用的是什么代码,都可以用这个方式写;

2.声明式编程

是以数据结构的形式来表达程序执行的逻辑,它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做,让机器想出如何去做。例如,SQL语句就是最明显的一种声明式编程的例子,除了SQL,网页编程中用到的HTML和CSS也都属于声明式编程。通过观察可以发现声明式编程的代码有一个特点是它不需要创建变量用来存储数据,另一个特点是它不包含循环控制的代码,如for,while。

3.函数式编程

函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是lambda演算,而且lambda演算的函数可以接受函数当做输入(参数)和输出(返回值)。它属于“结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套函数调用。

三、编程范式与语言及程序设计思想的关系

范式更多是语言规范,就是这个类型的代码应该怎么写,程序员需要按照其规定的语法风格进行代码的编写。编程范式是抽象的,必须通过具体的编程语言来体现。一种范式可以在不同的语言中实现,一种语言也可以同时支持多种范式,但抽象的编程范式必须要通过具体的编程语言来体现。例如Java语言,是命令式编程,计算机通过代码指令来一步一步执行操作,但Java 8开始也支持了函数式编程方式。范式的世界观体现在语言的核心概念之中,范式的方法论体现在语言的表达机制中。一种语言的语法和风格与其所支持的编程范式密切相关。

而通常我们所说的程序设计思想,例如面向过程,面向对象,面向切面等,是一种针对于业务的程序设计思想,其目的是在语法规范支持的前提下,针对于程序需要处理的具体问题,采用某种设计思想来组织代码,使得代码具有更高的可读性、扩展性、维护性。例如,以面向对象程序设计举例,我们程序设计的目标是软件的可用性,系统的可扩展、灵活性和可插入性,语言是我们达到这个目标所要的通道或手段,面向对象程序设计思想则是我们通过手段实现目标的过程中需要追寻的道,比如开闭原则,里氏代换等,遵循这些道,我们就可以更好的达到目标。

编程范式说的是每一行代码所遵守的规范,说的是每一行源代码。程序设计思想解决的是如何把每一行源代码组织起来汇聚成“形”。不同的程序设计思想可以体现在同一个范式的代码中,同一个程序设计思想也可以使用不同范式的规范来编写代码。一个说的是程序的基本风格,另一个说的是设计思想,属于两个不同维度的概念。

发布了71 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/TuGeLe/article/details/82837894