函数式语言

  函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言。函数式语言主要成分是原始函数、定义函数和函数型。这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数,程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的“逐词”工作方式。

  Haskell、Clean、Meta Language、erlang、Lisp等都是函数式语言

  为什么函数式语言会流行起来,这就不得不拿另一个编程范式面向对象编程(Object Oriented Programming)作对比,因为面向对象编程曾经统治了业界很长一段时间,而函数式编程正在逐渐挑战面向对象的地位。这两种编程方式都可以让代码更容易理解,不过方式不同。简单说来,面向对象的方法把状态的改变封装起来,以此达到让代码清晰的目的;而函数式编程则是尽量减少变化的部分,以此让代码逻辑更加清晰。面向对象的思想是把数据封装在类的实例对象中,把数据藏起来,让外部不能直接操作这些对象,只能通过类提供的实例方法来读取和修改这些数据,这样就限制了对数据的访问方式。对于毫无节制任意修改数据的编程方式,面向对象无疑是巨大的进步,因为通过定义类的方法,可以控制对数据的操作。但是,面向对象隐藏数据的特点,带来了一个先天的缺陷,就是数据的修改历史完全被隐藏了。有人说,面向对象编程提供了一种持续编写烂代码的方式,它让你通过一系列补丁来拼凑程序。这话有点过激,但是也道出了面向对象编程的缺点。当我们在代码中看到一个对象实例的时候,即使知道了对象的当前状态,也没法知道这个对象是如何一步一步走到这个状态的,这种不确定性导致代码可维护性下降。函数式编程中,倾向于数据就是数据,函数就是函数,函数可以处理数据,也是并不像面向对象的类概念一样把数据和函数封在一起,而是让每个函数都不要去修改原有数据(不可变性),而且通过产生新的数据来作为运算结果(纯函数)。

猜你喜欢

转载自www.cnblogs.com/u-n-owen/p/10429790.html