函数在编程中扮演着什么样的作用?

 我来答
HI小小大人物
2016-10-06 · TA获得超过2万个赞
知道大有可为答主
回答量:3433
采纳率:94%
帮助的人:291万
展开全部
  函数在编程中的作用:
  支持闭包和高阶函数,支持惰性计算(lazy evaluation)。使用递归作为控制流程的机制。加强了引用透明性。没有副作用。我将重点放在在 Java 语言中使用闭包和高阶函数上,但是首先对上面列出的所有特点做一个概述。

  闭包和高阶函数
  函数编程支持函数作为第一类对象,有时称为 闭包或者 仿函数(functor)对象。实质上,闭包是起函数的作用并可以像对象一样操作的对象。与此类似,FP 语言支持 高阶函数。高阶函数可以用另一个函数(间接地,用一个表达式) 作为其输入参数,在某些情况下,它甚至返回一个函数作为其输出参数。这两种结构结合在一起使得可以用优雅的方式进行模块化编程,这是使用 FP 的最大好处。

  惰性计算
  除了高阶函数和仿函数(或闭包)的概念,FP 还引入了惰性计算的概念。在惰性计算中,表达式不是在绑定到变量时立即计算,而是在求值程序需要产生表达式的值时进行计算。延迟的计算使您可以编写可能潜在地生成无穷输出的函数。因为不会计算多于程序的其余部分所需要的值,所以不需要担心由无穷计算所导致的 out-of-memory 错误。一个惰性计算的例子是生成无穷 Fibonacci 列表的函数,但是对 第 n 个Fibonacci 数的计算相当于只是从可能的无穷列表中提取一项。

  递归
  FP 还有一个特点是用递归做为控制流程的机制。例如,Lisp 处理的列表定义为在头元素后面有子列表,这种表示法使得它自己自然地对更小的子列表不断递归。

函数的优点:

1.代码简洁,开发快速
  函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。
  Paul Graham在《黑客与画家》一书中写道:同样功能的程序,极端情况下,Lisp代码的长度可能是C代码的二十分之一。
  如果程序员每天所写的代码行数基本相同,这就意味着,"C语言需要一年时间完成开发某个功能,Lisp语言只需要不到三星期。反过来说,如果某个新功能,Lisp语言完成开发需要三个月,C语言需要写五年。"当然,这样的对比故意夸大了差异,但是"在一个高度竞争的市场中,即使开发速度只相差两三倍,也足以使得你永远处在落后的位置。"

  2. 接近自然语言,易于理解
  函数式编程的自由度很高,可以写出很接近自然语言的代码。
  前文曾经将表达式(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语言早就证明了这一点,它是瑞典爱立信公司为了管理电话系统而开发的,电话系统的升级当然是不能停机的。
小孤落6
2016-10-01 · TA获得超过185个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:114万
展开全部
一个项目,如果你要添加用户,往数据库里插入用户呗,需要连接数据库操作。
你又要删除用户,从数据库里删除用户呗,需要连接数据库。
你又要修改用户,从数据库里修改呗,需要连接数据库。
不把数据库连接这段代码封装成函数你要写多少次?
更多追问追答
追问
哦。明白了一点。本人数学不好,函数又是什么作用呢!能不能举个通俗易懂的例子?
追答
这跟数学没关系。函数就是把常用的代码封装起来,增强代码复用性。
而且我上面说的还不够通俗易懂吗?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guozimaishuai
2016-10-01 · TA获得超过122个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:63万
展开全部
强大到无法替代的作用
追问
什么作用?本人数学不好函数又代表什么作用?可以举一个通俗易懂的例子吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式