什么是函数式编程思维

函数式思维就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus)。

什么是函数式编程思维-Worktile社区

函数式思维就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里函数的计算可随时调用。

函数式编程的思想在软件开发领域由来已久。在众多的编程范式中,函数式编程虽然出现的时间很长,可是在编程范式领域和整个开发社区中的流行度一直不温不火。函数式编程有一部分狂热的支持者,在他们眼中,函数式编程思想是解决各类软件开发问题的终极方案;而另外的一部分人,则以为函数式编程的思想并不容易理解,学习曲线较陡,上手起来也有必定的难度。大多数人更倾向于接受面向对象或是面向过程这样的编程范式。这也是形成函数式编程范式一直停留在小众阶段的缘由。前端

这样两极化的反应,与函数式编程自己的特性是分不开的。函数式编程的思想脱胎于数学理论,也就是咱们一般所说的λ演算(λ-calculus)。一听到数学理论,可能不少人就感受头都大了。这的确是形成函数式编程的学习曲线较陡的一个缘由。如同数学中的函数同样,函数式编程范式中的函数有独特的特性,也就是一般说的无状态或引用透明性(referentialtransparency)。一个函数的输出由且仅由其输入决定,一样的输入永远会产生一样的输出。这使得函数式编程在处理不少与状态相关的问题时,有着自然的优点。函数式编程的代码一般更加简洁,可是不必定易懂。函数式编程的解决方案中透露出优雅的美。

函数式编程所涵盖的内容很是普遍,从其背后的数学理论,到其中包含的基本概念,再到诸如Haskell这样的函数式编程语言,以及主流编程语言中对函数式编程方式的支持,相关的专有第三方库等。经过本系列的学习,你能够了解到不少函数式编程相关的概念。你会发现不少概念均可以在平常的开发中找到相应的映射。好比作前端的开发人员必定据说太高阶组件(high-ordercomponent),它就与函数式编程中的高阶函数有着殊途同归之妙。流行的前端状态管理方案Redux的核心是reduce函数。库reselect则是记忆化(memoization)的精妙应用。不少Java开发人员已经切实的体会到了Java8中的Lambda表达式如何让对流(Stream)的操做变得简洁又天然。

延伸阅读:

什么是函数式语言?

函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言。函数式语言主要成分是原始函数、定义函数和函数型。这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数,程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的“逐词”工作方式。

由于计算机技术的不断发展,函数式编程语言逐渐得到人们的重视。我们现在使用的大多数编程语言大都是以冯诺伊曼式的计算机为设计背景,所以我们称这些计算机编程语言为诺伊曼式语言。1977年,John Backus提出了函数式编程语言,这种语言以非冯诺伊曼式的计算机为设计而背景,所以我们又称这样的函数式编程语言称为非冯诺伊曼式语言。函数式编程,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免状态以及可变数据。函数编程语言最重要的基础是λ演算。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。和命令式编程相比,函数式编程强调函数的计算比指令的运行重要。和程序编程相比,函数式编程裹,函数的计算可随时调用。

文章标题:什么是函数式编程思维,发布者:小编,转载请注明出处:https://worktile.com/kb/p/35336

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年1月12日 上午2:05
下一篇 2023年1月12日 上午2:08

相关推荐

  • StreamNative翟佳:开源模式价值为王,基础软件的未来在国内社区

    翟佳,StreamNative 联合创始人Apache Pulsar 和 Apache BookKeeper PMC 成员,前 EMC 统一存储部门技术负责人,前 Streamlio 创始工程师。2020 年获选“中国开源先锋 33 人榜单”、2021 年荣获“OSCAR 尖峰开源人物”称号,开源技…

    2022年3月20日
    15500
  • 联软科技张建耀:不擅长营销的拓荒高手,企业长期发展必经管理变革

    文| babayage 编辑 | 笑 笑 爱上IT的动力工程专业生与马化腾师出同门 1998年,比同龄人早上学两年的张建耀,带着一身稚气就读热能动力工程专业,不过发动机这颗“人类工业文明王冠上的明珠”并没能拴住他的心,在需要买电话卡拨号上网的年代,张建耀对互联网产生了浓厚的兴趣。有别于沉迷于论坛、聊…

    2022年3月20日
    16000
  • 如何用excel制作甘特图

    用excel制作甘特图的步骤:1、拆解项目;2、在excel表上绘制;3、根据甘特图的进度安排工作。拆解项目时,要将一个项目或一件相对复杂和有难度的工作拆解成具体任务,并明确各任务的起始时间和结束时间。 1、拆解项目 将一个项目或一件相对复杂和有难度的工作拆解成具体任务,并明确各任务的起始时间和结束…

    2023年2月22日
    3000
  • mysql readview和当前读是怎么处理的

    在 MySQL 中,Read View 和当前读是相互独立的。Read View 只是用于控制事务读取数据的版本,不涉及数据的修改操作。当前读则是用于读取最新的数据版本,并且涉及数据的修改操作。在进行读操作时,如果使用了 Read View,那么事务只能读取在创建该 Read View 之前创建的数…

    2023年5月31日
    700
  • 数据挖掘可用于哪些方面

    数据挖掘可用于:1、预测风险;2、对用户进行分组;3、分析人的行为;比如预测风险方面分析数据以确定以前出现过哪些问题(例如,查找商品之后却并未购买的在线访问者的数量),可以帮助零售商针对未来的库存采购制定更好的决策。 数据挖掘可用于哪些方面? 数据挖掘有许多用途,具体取决于公司及其需求。可能的用途包…

    2022年11月7日
    14400
  • scrum master的职责有哪些

    主要职责如下:1、保证团队资源合理利用;2、保证各个角色及职责良好协作;3、解决团队开发中的障碍;4、作为团队和团队外部的接口,协调解决沟通中的问题;5、保证开发过程按计划进行,组织Sprint计划会议,每日站会, print评审会和Sprint回顾会。 敏捷开发中的SM即Scrum Master,…

    2022年11月16日
    15100
  • 为什么要开发志愿者app,开发志愿者app都有哪些作用和好处

    为什么要开发志愿者app,开发志愿者app都有哪些好处:1、提高宣传力度;2、对各类志愿服务事项进行管理;3、结合线上的宣传可以面向更广泛的用户;4、方便用户申请。现如今人们生活节奏不断加快,很多活动志愿者较为紧缺,使用志愿APP则能方便专业人员在线普及志愿者的重要性。 一、提高宣传力度 现如今人们…

    2023年5月9日
    400
  • 在Scrum中,怎么有效的进行bug的管理

    在Scrum中,进行bug的管理应该分为三种情境:1、bug来自于正在开发的sprint;2、bug来自于已经结束的sprint;3、bug十分紧急,必须立刻修复。其中,如果bug来自于正在开发的sprint,会在task阶段就被标记为有bug,这个很容易解决。 1、bug来自于正在开发的sprin…

    2023年1月2日
    7900
  • 什么是scrum敏捷管理

    Scrum敏捷项目管理方法起源于英式橄榄球争球的队形,它是由三个角色:产品负责人、Scrum Master(敏捷教练)人,开发团队成员;四个仪式:冲刺计划会、每日站会、冲刺评审会、冲刺回顾会和三个物件:产品积压、冲刺积压、燃尽图组成的一套项目管理方法。 一、Scrum敏捷管理的起源 Scrum敏捷项…

    2023年4月24日
    2000
  • Python 中的 lambda 和「真正的」lambda 有什么区别

    区别是:真正的 lambda 就是没有名字的函数,能做到任何普通函数能做到的事情,除了方便地递归调用自己。Python 因为本身设计思想,仅仅将 lambda 定位成一个辅助用的短函数,为了避免使用中为一些临时的小代码专门还要写 def 。 真正的 lambda 就是没有名字的函数,能做到任何普通函…

    2023年2月16日
    3200

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部