`

函数式编程(Functional Programming)

阅读更多

函数式编程已经有比较长的历史了,如今的动态语言,很大程度上也受到了函数式编程(反过来名叫命令式编程)的启发。

在函数式编程语言中,当你写了一个函数,接受一些参数,那么当你调用这个函数时,影响函数调用的只可能是你传进去的参数,而你得到的也只能够是计算结果。因此,一个void的方法,是没有任何意义的。如果传入了引用类型的参数,也是不合要求的。

在函数式编程中访问状态是十分安全的,因为状态不会改变,我可以把一个Point或List对象交给任意多的地方去访问,完全不用担心副作用。函数式编程的十分容易并行,因为我在运行时不会修改状态,因此无论多少线程在运行时都可以观察到正确的状态。两个函数完全无关,因此它们是并行还是顺序地执行便没有什么区别了。我们还可以有延迟计算,可以进行Memorization,经常使用递归作为控制流,这些都是函数式编程中十分有趣的方面。

在函数编程中,编程人员有一个天然框架用来开发更小的、更简单的和更一般化的模块, 然后将它们组合在一起。函数编程的一些基本特点包括:

  • 支持闭包和高阶函数。
  • 支持懒惰计算(lazy evaluation)。
  • 使用递归作为控制流程的机制。
  • 加强了引用透明性。
  • 没有副作用。

在实际编程中,我们需要共享许多东西,比如显示器,比如打印机,比如某一块区域的资源,一旦这样的事情发生(这样的事情太频繁了,以至于函数式编程反而变得越来越稀缺),我们就需要额外地考虑很多因素。

老赵写了这么一个有趣的说明:

 

private int i = 0;
public lambda int Function( int p, Random random )//编译错误,不允许引用类型参数
{
	int j = p + i;//编译错误,不允许使用i。
	p++;//编译错误,不允许更改变量
	int r = random.Next( j );//编译错误,不允许使用非lambda修饰的函数。
	return r;
}
 

对于非常讨厌在脚本语言代码中大片大片地使用全局的或者共享变量来传值、存储状态的人来说,使用函数式编程的递归和回调思想,可以把很多丑陋的代码优美起来。

 

文章系本人原创,转载请注明作者和出处

分享到:
评论

相关推荐

    JavaScript函数式编程.pdf

    函数式编程(Functional Programming)是一种编程范式,它将计算视为数学函数的评估,并且避免改变状态和可变数据。在JavaScript中,函数是一等公民,这意味着函数可以被赋值给变量、作为参数传递给其他函数以及...

    函数式编程简介Introduction to Functional Programming

    显示了从命令式编程到函数式编程的过渡。 介绍了lambda演算,如何向其添加类型以及如何使用ML来实现基本的功能编程,多态性,异常和命令式功能。

    function programming in scala 英文原版 scala函数式编程

    英文原版 scala函数式编程 function programming in scala

    Learning functional programming in Scala

    《Learning functional programming in Scala》是一本专注于学习Scala语言中函数式编程的书籍。Scala是一种多范式编程语言,它将面向对象编程和函数式编程相结合,为开发者提供了强大的编程范式。本书是由Alvin ...

    Functional Programming in C#.pdf

    本书《Functional Programming in C#》旨在为读者揭示如何将传统的面向对象编程技巧与现代的函数式编程理念相结合,从而更好地适应当前的开发趋势。 #### 第一部分:函数式编程概览 ##### 章节1:函数式编程的历史...

    monads for functional programming

    ### Monad在函数式编程中的应用 #### 引言 Monad作为一种源自范畴论的概念,在理论计算机科学领域得到了广泛的应用。尤其在函数式编程中,Monad提供了一种强大的工具,用于模拟其他语言中的各种副作用,例如全局...

    Functional Programming in Scala正式版

    - **定义与特性**:函数式编程(Functional Programming, FP)是一种编程范式,它将计算过程视为一系列数学函数的组合。FP强调不可变性和纯函数的概念,即函数的结果只依赖于其输入参数,且不会产生副作用。 - **优点*...

    Introduction to Functional Programming

    在《Introduction to Functional Programming》一书中,作者Bird和Wadler深入浅出地介绍了函数式编程的概念和实践。这本书对于想要学习F#或其他函数式语言的开发者来说是一本宝贵的资源。 **函数式编程的核心概念**...

    函数式swift 函数式编程(中文版)高清pdf

    《函数式Swift》是面向Swift开发者的指南,旨在深入探索函数式编程(Functional Programming, FP)范式在Swift语言中的应用。Swift是苹果公司设计的一种强类型、安全和快速的编程语言,广泛用于iOS、macOS、watchOS...

    learning functional programming complexity

    标题"learning functional programming complexity"暗示了我们即将探讨的是关于函数式编程中的复杂性问题。函数式编程是一种编程范式,它强调使用数学函数来处理数据,并尽可能避免改变状态和可变数据。复杂性在这里...

    JavaScript函数式编程(Functional Programming)纯函数用法分析

    主要介绍了JavaScript函数式编程(Functional Programming)纯函数用法,结合实例形式分析了javascript函数式编程中纯函数的函数依赖、所指透明等概念相关原理及使用技巧,需要的朋友可以参考下

    Java 8新特性之Lambda与函数式编程.pdf

    其中,Lambda表达式和函数式编程的支持是最具影响力的变化之一。 函数式编程是一种编程范式,它将计算视为数学函数的评估,并避免改变状态和可变数据。这种范式的核心在于声明式的代码风格,即程序员只需声明所需做...

    同步函数编程_synchronous functional programming

    同步函数编程(Synchronous Functional Programming)是一种编程范式,它结合了函数式编程的特性与同步执行的概念。在函数式编程中,程序被视为一系列计算,而不是状态改变的过程,而同步执行意味着这些计算按照顺序...

    functional programming in scala and impatient.pdf

    《Functional Programming in Scala》与《Scala for the Impatient》是两本关于Scala编程语言的重要书籍,专注于函数式编程思想和Scala语言的深入学习。Scala是一种多范式编程语言,结合了面向对象和函数式编程的...

    JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析

    主要介绍了JavaScript函数式编程(Functional Programming)组合函数(Composition)用法,结合实例形式分析了javascript函数式编程中组合函数的概念、原理、用法及操作注意事项,需要的朋友可以参考下

    类型理论与函数式编程Type Theory and Functional Programming

    本书提供了类型理论的形式系统,并开发了程序和证明的示例。 从功能编程的角度来看,本书强调了系统语言与传统语言之间的差异。

    Functional Programming and Parallel Graph Rewriting.pdf

    在计算机科学领域,函数式编程(Functional Programming)和并行图重写(Parallel Graph Rewriting)是两个极具研究价值的主题,它们不仅推动了软件工程的发展,还为高性能计算和大数据处理提供了新的视角和方法。...

    函数式编程语言的实现The Implementation of Functional Programming Languages

    描述如何将高级功能语言转换为称为lambda演算的中间语言,以及如何使用惰性图约简来实现。

Global site tag (gtag.js) - Google Analytics