引用:
http://www-128.ibm.com/developerworks/cn/java/j-fp/
摘要:
在函数编程中,编程人员有一个天然框架用来开发更小的、更简单的和更一般化的模块, 然后将它们组合在一起。函数编程的一些基本特点包括:
支持闭包和高阶函数。
支持懒惰计算(lazy evaluation)。
使用递归作为控制流程的机制。
加强了引用透明性。
没有副作用。
闭包和高阶函数
函数编程支持函数作为第一类对象,有时称为 闭包或者 仿函数(functor)对象。实质上,闭包是起函数的作用并可以像对象一样操作的对象。与此类似,FP 语言支持 高阶函数。高阶函数可以用另一个函数(间接地,用一个表达式) 作为其输入参数,在某些情况下,它甚至返回一个函数作为其输出参数。这两种结构结合在一起使得可以用优雅的方式进行模块化编程,这是使用 FP 的最大好处。
ps:这两样东西在js里都可以看到使用
懒惰计算
除了高阶函数和仿函数(或闭包)的概念,FP 还引入了 懒惰计算的概念。在懒惰计算中,表达式不是在绑定到变量时立即计算,而是在求值程序需要产生表达式的值时进行计算。延迟的计算使您可以编写可能潜在地生成无穷输出的函数。因为不会计算多于程序的其余部分所需要的值,所以不需要担心由无穷计算所导致的 out-of-memory 错误。一个懒惰计算的例子是生成无穷 Fibonacci 列表的函数,但是对 第 n 个Fibonacci 数的计算相当于只是从可能的无穷列表中提取一项。
递归
FP 还有一个特点是用递归做为控制流程的机制。例如,Lisp 处理的列表定义为在头元素后面有子列表,这种表示法使得它自己自然地对更小的子列表不断递归。
关于实现库
我使用了由 Apache Commons Functor 项目提供的库构建本文使用的例子。Apache Commons Functor 库包括大量基本构造,可以在涉及闭包和高阶函数的复杂使用场景中重复使用。当然,可以使用不同的实现(如 Java Generic Libraries、Mango 或者 Generic Algorithms for Java),而不会对在本文中所讨论和展示的概念有影响,尽管您必须下载和使用 Apache Commons Functor 库才能演示这里的例子。
引用透明性
函数程序通常还加强 引用透明性,即如果提供同样的输入,那么函数总是返回同样的结果。就是说,表达式的值不依赖于可以改变值的全局状态。这使您可以从形式上推断程序行为,因为表达式的意义只取决于其子表达式而不是计算顺序或者其他表达式的副作用。这有助于验证正确性、简化算法,甚至有助于找出优化它的方法。
副作用
副作用是修改系统状态的语言结构。因为 FP 语言不包含任何赋值语句,变量值一旦被指派就永远不会改变。而且,调用函数只会计算出结果 ── 不会出现其他效果。因此,FP 语言没有副作用。
Java 语言中的函数编程
continue。。。
分享到:
相关推荐
太阳微系统对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言” Java不同于一般的编译语言或解释型语言。它首先将源代码编译成...
Style 给 Java 8 带来其他语言高效的编程风格。 Style 通过精心挑选的方法/类名来模拟其他语言。 Style 致力于让你的编码更加美观,进行更少的重复编码,以及提升可读性。 代码示例: // define a ...
Java 函数式编程教程 资源为视频教程资源 希望对你的 Java 学习有所帮助。
通过几个java包中的API实现了ping这样的功能,完整代码 请参考!
借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...
编程语言Java基本函数.pdf
计算机软件-编程源码-Java计算机语言函数应用.zip
这个库的目的是要在java中提供一个类似parsec, spirit的库,这种组合子库并非c++的专利,java/c#也可以做到。这个库还将在java5.0上被改写,类型安全上它将也不再逊色于c++。 那么,为什么叫“函数式”呢?java是...
推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第4章 方法 函数(共26页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第5章 数组(共58页).ppt 推荐课程 完整版优质...
Java函数式编程是指利用函数式编程的思想和特性来开发Java应用程序。函数式编程强调将计算...函数式编程在Java中的应用可以带来许多好处,包括代码简洁、易于并发编程、函数复用性高等。另外,函数式编程也与并行计算
推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第4章 方法 函数(共26页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第5章 数组(共58页).ppt 推荐课程 完整版优质...
推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第4章 方法 函数(共26页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第5章 数组(共58页).ppt 推荐课程 完整版优质...
(二)自学能力 通过本课程的学习,要求学生掌握JAVA语言编程的规范和思想,并具备编写小型程 序的能力。 五、课程内容和要求 "序"课程内容 "教 学 要 求 " "号" " " " " "理论知识 "实验能"学"作"实"实" " " " ...
中文名: 面向Java开发者的函数式编程 原名: Functional Programming for Java Developers 作者: Dean Wampler 资源格式: PDF 版本: 英文文字版/更新EPUB版本/更新MOBI版本 出版社: O'Reilly书号: 978-1-4493-1103-2...
Java语言程序设计实验指导书 理论教材:《Java程序设计标准教程》 第1版 邱加永 人民邮电出版社 实验学时:26 要求 1 Java运行环境 通过在不同环境编译运行一个Java编程环境,认识Java程序结构。 2 Java语言基本...
在今后的软件设计中无论使用Clojure语言,还是坚持使用Java语言,Clojure语言都将与java做比较,哪种是设计软件的最佳方式。 Clojure语言是一个JVM(包括Groovy,Jython和JRuby等语言)的新语言,它提供了活力,...
推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第4章 方法 函数(共26页).ppt 推荐课程 完整版优质java教程 java精品教学课件 Java语言程序设计 第5章 数组(共58页).ppt 推荐课程 完整版优质...
什么是Java中的面向对象编程(OOP)?列举OOP的原则。 什么是Java中的重载和重写?它们之间有什么区别? 什么是Java中的静态方法和实例方法?它们之间有什么区别? Java中如何实现字符串的连接? 什么是Java中的...
Lambda 表达式: 介绍 Java 8 中引入的 Lambda 表达式,以及如何使用 Lambda 表达式来简化代码和实现函数式编程风格。 Stream API: 介绍 Java 8 中引入的 Stream API,以及如何使用 Stream API 来处理集合数据和...
Frege 是一个非严格的纯函数编程语言,其灵感来自于 Haskell,Frege 程序可编译成 Java 并在 JVM 中运行。 标签:Frege 分享 window._bd_share_...