函数式编程语⾔(functionallanguage)
内容根据百度词条整理!
转载请声明来源:
baike.baidu/item/%E5%87%BD%E6%95%B0%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/22881056
1.WHAT?
函数式语⾔(functional language)⼀类程序设计语⾔,是⼀种⾮冯·诺伊曼式的程序设计语⾔。函数式语⾔主要成分是原始函数、定义函数和函数型。这种语⾔具有较强的组织数据结构的能⼒,可以把某⼀数据结构(如数组)作为单⼀值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为⾼阶函数,程序就是函数,程序作⽤在结构型数据上,产⽣结构型结果,从根本上改变了冯·诺伊曼式语⾔
的“逐词”⼯作⽅式。
函数式语⾔的核⼼特征:
(1)以“函数”为⾸,如同命令式语⾔中的“变量”,函数可以赋值给其他变量,可以作为其他函数的参数,
或者作为其他函数的返回值。
(2)不修改变量的值。
(3)只有表达式,没有语句。此处的语句指的是没有返回值得某些操作。
(4)引⽤透明(Referential transparency),函数的运⾏不依赖与外部变量或“状态”,简单的说就是,
同⼀个输⼊(参数),总是会产⽣同⼀个输出(返回值),这与数学函数的特征很⼀致。
命令式语⾔因为全局变量等的存在,就⽆法做到这⼀点。
(5)对⽐命令式语⾔,递归形式的循环。
2.INCLUDE?
纯函数式编程语⾔
强静态类型
Concurrent Clean
弱类型
Lazy K
⾮纯函数式编程语⾔
强静态类型
强动态类型
弱类型
Unlambda
其他函数式编程语⾔
3.WHY POPULAR?
程序员和编程员的区别 函数式编程语⾔有以下⼏个特点:
1、并⾏。在函数式编程中,程序员⽆需对程序修改,程序就可以并发运⾏。程序运⾏期间,不会产⽣
死锁现象。原因是通过函数式编程所得到的程序,在程序中不会 出现某⼀数据被同时修改两次及以上的情况,同样的,两个不同的线程就更不⽤说了。由于函数式编程有这样的优点,导致了程序员完全不⽤花费精⼒去考虑增加某个线程带来的并发问题。
2、单元测试。在函数式编程中,由于程序中的每⼀个符号都是final后的,所以这样的函数不会产⽣副作⽤。这就导致了在某个地⽅产⽣修改,同时不会有函数修改过在⾃⾝范围之外的变量或者状态被另外的函数所使⽤。这就导致了函数的返回结果只是返回值。只有函数⾃⾝的参数才会影响函数的返回值,所以在编程的时候,对程序中的每个函数⽽⾔,程序员只需在控制它们的参数,⽽不⽤在意函数⾃⼰点顺序以及函数外部变量和状态就能正确的编程。与函数式编程相⽐,命令式编程就没有这样的优势了,在检查函数的返回值的同时程序员还必须检查函数是否影响到了函数的外部状态和变量。
3、没有额外作⽤。副作⽤是指的是函数内部与外部互动。⽐如,函数在⾃⾝内部可以对函数以外的其他变量进⾏修改,这样就会产⽣其他结果。在函数式编程中,想要达到这样的⽬的就必须让函数⾃⾝要保持独⽴。在函数式程序语⾔中,所有的功能的结果就是⼀个返回值,不存在其他的⾏为,包括对外部变量的修改。
4、不修改状态。在函数式编程中,程序语⾔在使⽤中是会不修改变量的,它的⼀个特性可以使得函数式编程语⾔区别于其他的程序语⾔。在其他类型的语⾔中,变量是⽤来保存状态的。由于函数式编程不
修改变量,导致了这些状态不能存在于变量中。那么,函数式编程语⾔保存状态的⽅法是使⽤参数来保存,递归⽅法是最好的例⼦。由于采⽤了递归⽅法,函数式编程语⾔在运⾏速度上相对于其他语⾔较慢,所以,速度不够快是函数式编程语⾔长期不能⼴泛使⽤的主要原因。
5、引⽤透明。在函数式编程中,引⽤透明指的是运⾏函数的时候,函数的没⼀个步骤都不会不牵连到函数的外部变量或状态,⽽是只依赖于函数输⼊的参数,相同的参数输⼊总会得到相同的函数返回值。⽽在其他类型的语⾔中,函数的返回值不仅仅与函数的参数传⼊有关,也与当前的系统状态有关。在不同的系统状态的情况下,函数的返回值不同。
6、代码部署热。在以前,假如想在Windows上安装更新,安装之后重启计算机是必须进⾏的步骤,可能还不只⼀次的重启。即使是仅仅安装了⼀个⼩的软件也不能免于重启的步骤。⼀些特殊的系统,⽐如电信系统,这样的系统必须保证任何时间都在运⾏。因为如果在系统更新时紧急拨号失效,就可能造成很⼤的损失。最理想的情况是在完全不停⽌系统任何组件的情况下,达到更新相关的代码的⽬的。这样的想法在命令式编程中是不可能的。对函数式的程序,所有的状态即传递给函数的参数都被保存在了堆栈上,这使的热部署轻⽽易举。实际上,所有我们需要做的就是对⼯作中的代码和新版本的代码做⼀个差异⽐较,然后部署新代码。其他的⼯作将由⼀个语⾔⼯具⾃动完成。
优点总结:⾸先,函数式编程语⾔的代码⼗分简单,加快了开发的速度。并且由于在使⽤函数式编程
语⾔时,程序员会⼤量使⽤到函数,从⽽减少了重复的代码,因⽽程序⽐较短。其次,函数式编程语⾔更加接近我们使⽤的⾃然语⾔,程序员在学习和使⽤它的时候更加快捷容易。函数式编程语⾔的⾃由度很⾼,⼗分接近⾃然语⾔写出的代码。另外,函数式编程语⾔的代码管理更加⽅便。函数式编程不会对外部产⽣依赖,也不会修改外界的状态。程序员只需把指定的参数给函数,相同的参数其返回的结果必定是相同的。另外,函数式编程语⾔还⽀持并发编程,这就使得程序员在进⾏函数式编程时完全不⽤考虑死锁的问题,因为它根本就不修改变量,所以就不存在锁线程的问题。最后,函数式编程语⾔的代码⽀持代码热升级。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论