纯函数式语言:Haskell、Concurrent Clean、Miranda、Lazy K
非纯函数式语言:Erlang、LISP、LOGO、Scheme、Clojure、Mathematica、R、Scala、F#
Python、Ruby、JavaScript 对函数式编程的有很强的支持
面向对象的 Java 和面向过程的 PHP 也增加了对函数式的支持
函数式编程是一种编程范式,也就是如何编写程序的方法论。它属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。
函数式编程的五个特点:
1. 函数是”第一等公民”
函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
2. 只用”表达式”,不用”语句”
函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。
3. 没有”副作用”
函数式编程强调没有”副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
4. 不修改状态
函数式编程只是返回新的值,不修改系统变量。
5. 引用透明
指的是函数的运行不依赖于外部变量或”状态”,只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。
优点:
1. 代码简洁,开发快速
函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
2. 接近自然语言,易于理解
因为函数式编程主张表达式化处理过程,因此如果表达式定义得好,可以十分接近自然语言,易于理解
3. 更方便的代码管理
函数式编程不依赖外部的变量进行运算,因此每个函数都是独立的,有利于调试和维护
4. 易于”并发编程”
同样函数式编程不依赖外部变量,函数的运行结果只与参数很函数本身有关,因此是线程安全的,可以放心的将函数用到多个线程上,易于并发编程
缺点:
1. 写法很灵活,学习成本较高。
2. 有些情况下,由于存在大量函数调用,函数式语言运行速度较慢