[C/C++]函数式编程

“函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。举例来说,现在有这样一个数学表达式:函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。(1 + 2) * 3 - 4 传统的过程式编程,可能这样写:   var a = 1 + 2;   var b = a * 3;   var c = b - 4;函数式编程要求使用函数,我们可以把运算过程定义为不同的函数,然后写成下面这样:   var result = subtract(multiply(add(1,2), 3), 4);简言之,就是把最最基础的所有表达式的操作,都封装成函数,哪怕是最简单的加法的编程理论

特点:

  1. 函数是"第一等公民"所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的
    返回值。举例来说,下面代码中的print变量就是一个函数,可以作为另一个函数的参数。

  2. 只用"表达式",不用"语句" “表达式”(expression)是一个单纯的运算过程,总是有返回值;“语句”(statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,
    不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。

  3. 没有"副作用" 所谓"副作用"(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。
    函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。

  4. 不修改状态 上一点已经提到,函数式编程只是返回新的值,不修改系统变量。因此,不修改变量,也是它的一个重要特点。

  5. 引用透明 引用透明(Referential transparency),指的是函数的运行不依赖于外部变量或"状态",只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同

  6. 由于都是函数,所以效率低

  7. 禁止IO,因为IO相当于是’共享‘一个外部全局变量了,与函数编程的理论不符合

好处:

  1. 代码简洁,开发快速 这个不用解释了吧
    2.可读性强,都是函数封装嘛

  2. 更方便的代码管理 函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unit testing)和除错
    (debugging),以及模块化组合。

  3. 易于"并发编程" 函数式编程不需要考虑"死锁"(deadlock),因为它不修改变量,所以根本不存在"锁"线程的问题。不必担心一个线程的数据,被另一
    个线程修改,所以可以很放心地把工作分摊到多个线程,部署"并发编程"(concurrency)。

  4. 代码的热升级 函数式编程没有副作用,只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升级代码,不需要重启,也不需要停机。Erlang语言早就证明了这一点,它是瑞典爱立信公
    司为了管理电话系统而开发的,电话系统的升级当然是不能停机的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值