zoukankan      html  css  js  c++  java
  • 函数式编程

    1.函数式编程定义
    简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
    2.典型的函数式编程语言
    纯函数式编程语言

    非纯函数式编程语言

    其他函数式编程语言

    3.为什么流行
    (1) 代码简洁,开发快速
    函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
    Paul Graham在《黑客与画家》一书中写道:同样功能的程序,极端情况下,Lisp代码的长度可能是C代码的二十分之一。
    如果程序员每天所写的代码行数基本相同,这就意味着,"C语言需要一年时间完成开发某个功能,Lisp语言只需要不到三星期。反过来说,如果某个新功能,Lisp语言完成开发需要三个月,C语言需要写五年。"当然,这样的对比故意夸大了差异,但是"在一个高度竞争的市场中,即使开发速度只相差两三倍,也足以使得你永远处在落后的位置。) 接近自然语言,易于理解
    函数式编程的自由度很高,可以写出很接近自然语言的代码。
    前文曾经将表达式(1 + 2) * 3 - 4,写成函数式语言:
    subtract(multiply(add(1,2), 3), 4)
    对它进行变形,不难得到另一种写法:
    add(1,2).multiply(3).subtract(4)
    这基本就是自然语言的表达了。再看下面的代码,大家应该一眼就能明白它的意思吧:
    merge([1,2],[3,4]).sort().search("2")
    因此,函数式编程的代码更容易理解。
    (3) 更方便的代码管理
    函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unit testing)和除错(debugging),以及模块化组合。
    (4)易于"并发编程"
    函数式编程不需要考虑"死锁"(deadlock),因为它不修改变量,所以根本不存在"锁"线程的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署"并发编程"(concurrency)。
    请看下面的代码:
    var s1 = Op1();
    var s2 = Op2();
    var s3 = concat(s1, s2);
    由于s1和s2互不干扰,不会修改变量,谁先执行是无所谓的,所以可以放心地增加线程,把它们分配在两个线程上完成。其他类型的语言就做不到这一点,因为s1可能会修改系统状态,而s2可能会用到这些状态,所以必须保证s2在s1之后运行,自然也就不能部署到其他线程上了。
    多核CPU是将来的潮流,所以函数式编程的这个特性非常重要。
    (5)代码的热升级
    函数式编程没有副作用,只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升级代码,不需要重启,也不需要停机。Erlang语言早就证明了这一点,它是瑞典爱立信公司为了管理电话系统而开发的,电话系统的升级当然是不能停机的。
     
     
     
     
     
  • 相关阅读:
    Google Maps 尝鲜
    ASDoc 的一些参数
    一本比较简单易懂的中文python入门教程
    word2010 2007中如何去掉首页页码
    转贴:关于出现java.lang.UnsupportedClassVersionError 错误的原因
    Windows下搭建SVN傻瓜式教程
    Red Hat中jdk1.6.0_03 tomcat6.0.35将hudson.war放入webapp后启动tomcat报错X connection to localhost:11.0 broken
    使用alternatives切换red hat linux的jdk版本
    linux安装ant 1.8.2
    反编译插件jadclips
  • 原文地址:https://www.cnblogs.com/zhixiazhimeng/p/10467402.html
Copyright © 2011-2022 走看看