函数式编程 ╰半橙微兮° 2022-05-30 02:06 308阅读 0赞 ## 什么是函数式编程 ## 函数式编程是一种编程规范,常见的编程规范有**命令式编程,函数式编程,逻辑式编程** ,常见的面向对象编程也是一种命令式编程。 **命令式编程** :命令式编程是面向计算机硬件的抽象,有**变量** (对应存储单元),**赋值语句** (获取,存储指令),**表达式** (内存引用和算术运算)和**控制语句**(跳转指令),一句话总结,命令式程序就是一个冯诺依曼的指令序列。 **函数式编程** :函数式编程是面向数学的抽象,将计算描述为一种**表达式求值**,一句话总结,函数式程序就是一个表达式。严格意义上的函数式编程意味着不使用可变的变量,赋值,循环和其他命令式控制结构进行编程。 ## 函数式编程的特点 ## 函数式编程中的**函数** 这个术语不是指计算机中的函数,而是指**数学中的函数** ,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。 * 函数是**第一等公民** ”第一等公民“指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。 * **只用“表达式”,不用“语句”** “表达式”(expression)是一个单纯的运算过程,总是有返回值;“语句”(statement)是执行某种操作,没有返回值。 **原因**: 函数式编程的开发动机,一开始就是为了处理运算(computation),不考虑系统的读写(I/O)。“语句”属于对系统的读写操作,所以就被排斥在外。 **注意**:在实际的编程中不做I/O是不可能的,所以函数式编程只是要求把I/O限制到最小,不要有不必要的读写行为,保持计算过程的单纯性。 * **没有“副作用”** 指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。函数式编程强调没有“副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,**尤其是不能修改外部变量的值。** * **不修改状态** 函数式编程只是返回新的值,不修改系统变量。在其他类型的语言中,变量往往用来保存“状态”(state)。不修改变量,意味着状态不能保存在变量中。**函数式编程使用参数保存状态,最好的例子是递归** 。由于使用了递归,函数式语言的运行速度比较慢,**这也是长期不能在业界推广的主要原因** 。 **注意**: 纯函数式编程语言中的变量也不是命令式编程语言中的变量,即存储状态的单元,而是**代数中的变量,即一个值的名称。** 变量中的值是不可变的(immutable),也就是说不允许像命令式编程语言中那样多次给一个变量赋值。eg,命令式编程语言写“x = x +1”,这依赖可变状态的事实,在数学上是不成立的。 * **引用透明** 引用透明(referential transparency),指的是函数的运行不依赖于外部变量或“状态”,只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是形同的。 其他语言可能引用的全局变量导致函数的返回值往往与系统状态有关,不同状态之下,返回值是不一样的。这就叫”引用不透明“。 ## 函数式编程的好处 ## * 函数即不依赖外部的状态也不修改外部的状态,函数调用的结果不依赖调用的时间和位置,这样写的代码容易进行推理,不容易出错。这使得单元测试和调试都更容易。 * 不变性的好处是多线程之间不共享状态,不会造成资源竞争(Race Condition),能够充分利用多核的特性,进行并发处理。 * 函数式编程不像命令式编程那样关注执行步骤,这个系统提供了优化函数式程序的空间,包括**惰性求值和并行处理**。 * 函数式语言是面向数学抽象,更接近人的语言,而不是机器语言,代码会比较简洁,也更容易被人理解。
相关 函数式编程 函数式编程-Stream流 1. 概述 1.1 为什么学? 能够看懂公司里的代码 大数量下处理集合效率高 代码可读性高 消灭嵌套地狱 我不是女神ヾ/ 2023年10月15日 23:50/ 0 赞/ 138 阅读
相关 函数式编程 函数式编程的主要设计点在于避免使用状态和可变的数据,即 stateless and immutable。 RXJS:响应式编程抽象出了流这个概念,提高了代码的抽象级别,我们 忘是亡心i/ 2023年06月06日 12:22/ 0 赞/ 67 阅读
相关 函数式编程 原文地址:[http://www.defmacro.org/ramblings/fp.html][http_www.defmacro.org_ramblings_fp.html 蔚落/ 2022年08月09日 05:28/ 0 赞/ 292 阅读
相关 函数式编程 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念 对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型 蔚落/ 2022年06月14日 05:07/ 0 赞/ 417 阅读
相关 函数式编程 > 原文链接:[https://github.com/EasyKotlin][https_github.com_EasyKotlin] 第8章 函数式编程(FP) > 分手后的思念是犯贱/ 2022年06月08日 08:38/ 0 赞/ 647 阅读
相关 函数式编程 什么是函数式编程 函数式编程是一种编程规范,常见的编程规范有命令式编程,函数式编程,逻辑式编程 ,常见的面向对象编程也是一种命令式编程。 命令式编程 :命令式编程是面向 ╰半橙微兮°/ 2022年05月30日 02:06/ 0 赞/ 309 阅读
相关 函数式编程 函数式编程 目前程序届分为两类编程:命令式和函数式,面向对象编程本身也是命令式编程的范畴. 函数式编程有两个最基本的运算:合成和柯里化。 合成 如下:compo 素颜马尾好姑娘i/ 2022年05月29日 02:15/ 0 赞/ 756 阅读
相关 函数式编程 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设 傷城~/ 2022年05月18日 07:44/ 0 赞/ 359 阅读
相关 函数式编程 [函数式编程另类指南][Link 1] 原文链接:[Functional Programming For The Rest of Us][] 原文作者:Vyachesla 刺骨的言语ヽ痛彻心扉/ 2022年04月13日 10:46/ 0 赞/ 414 阅读
相关 函数式编程 面向对象编程,我想大家都很清楚了. 函数式编程是将函数本身作为处理对象的编程范式. 最常用的就是lambda(匿名函数),有木有印象!!! 而且在定义一个lambda的 水深无声/ 2021年06月24日 14:36/ 0 赞/ 635 阅读
还没有评论,来说两句吧...