`

Java 语言中的函数编程

    博客分类:
  • Java
阅读更多
引用:

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 8及更高版本中,函数式编程得到了官方的大力支持,引入了Lambda表达式、Stream API和Optional类等新特性,使得Java开发者可以更高效、简洁地编写代码。 1. **Lambda表达式**: Lambda表达式是Java函数式...

    Java 8函数式编程.rar

    Java 8是一个重要的Java语言版本,它引入了对函数式编程的支持,极大地提升了代码的简洁性和可读性,特别是对于集合操作。函数式编程是一种编程范式,它将计算视为函数的组合,而不是状态的改变或控制流程。在Java 8...

    Java编程语言的计算机软件开发应用.pdf

    本文将详细探讨Java语言的主要特点,以及它在实际计算机软件开发中的应用。 首先,Java编程语言的特点是语法结构简单。它的语法设计尽量简化,避免了诸如复杂的运算符和循环嵌套等可能导致编程错误的设计,这使得...

    java 8 函数式编程 (源码)

    Java 8 是一个重要的Java版本,它引入了函数式编程的概念,极大地扩展了语言的功能,使得Java开发者可以采用更加简洁、高效的方式来编写代码。Richard Warburton 的《java 8 函数式编程》是一本深入解析这一主题的...

    Java实用编程技术第章-Java语言概述及编程基础.pptx

    Java语言概述及编程基础: Java语言是一种面向对象、分布式、平台中立、可移植、高效、安全的编程语言。它具有以下特点: 1、简单:Java语言的语法简单易学,易于程序员掌握和使用。 2、面向对象:Java语言是一种...

    java语言程序设计课后编程题答案答案

    Java语言程序设计是计算机科学教育中的重要组成部分,它教会我们如何使用Java这门强大的面向对象编程语言来解决问题。本资源“java语言程序设计课后编程题答案答案”聚焦于Java编程的基础篇,提供了课后练习题的解决...

    2022年java语言-java语言程序设计.docx

    * 函数:Java 语言中,函数可以用于封装代码,提高代码的复用性。 * 数组:Java 语言中,数组可以用于存储一组相同类型的数据。 * 字符串:Java 语言中,字符串可以用于存储一组字符。 5. Java 集合类 Java 集合类...

    java函数语言大全

    【标题】:“Java函数语言大全”可能引起了一些误解,实际上,描述中提到的是“C语言函数大全”,所以我们将重点讨论C语言的函数相关知识。 在编程语言中,函数是执行特定任务的可重用代码块。C语言作为基础且强大...

    黑马程序员Java函数式编程全套视频教程,Lambda表达式、Stream流、函数式编程一套全通关1

    此外,函数式编程中的高阶函数也是重点内容。高阶函数可以接受一个或多个函数作为参数,或者返回一个函数作为结果。在Java中,`Function`、`Predicate`和`Consumer`等接口就是函数接口的例子,它们分别代表一元函数...

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

    Java 8是Java语言发展史上一个重要的里程碑,它引入了多种新特性,旨在增强Java语言表达能力和提升开发效率。其中,Lambda表达式和函数式编程的支持是最具影响力的变化之一。 函数式编程是一种编程范式,它将计算视...

    JAVA语言中文教程

    《JAVA语言中文教程》是一份详尽的编程学习资料,主要介绍了JAVA语言的基础知识与面向对象的编程概念,适合初学者以及有一定编程基础的学习者深入理解JAVA语言的特性和编程技巧。 ### 第一章:JAVA概述 #### JAVA...

    java手册中英文java8,java9手册

    太阳微系统对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言” Java不同于一般的编译语言或解释型语言。它首先将源代码编译成...

    Java 8函数式编程 范例

    Java 8是Java语言的一个重要版本,引入了大量新特性,其中最具革命性的就是函数式编程的支持。函数式编程在Java 8中的实现主要体现在Lambda表达式、Stream API以及方法引用等方面,这些新特性极大地提高了代码的简洁...

    Java中的函数式编程_Java_Scala_下载.zip

    3. **不可变数据**:在函数式编程中,数据通常是不可变的,一旦创建就无法更改。Java的`Stream API`鼓励使用不可变集合,以减少状态变化带来的复杂性。 4. **惰性求值**:虽然Java本身并不支持惰性求值,但通过一些...

    JAVA语言程序设计基础篇编程题答案

    在JAVA语言程序设计基础篇中,编程题是学习过程中至关重要的一环。这些题目旨在帮助初学者巩固基础知识,理解和掌握JAVA编程的基本概念、语法结构以及常用数据类型和控制结构。本资料集包含了对这些基础编程题目的...

    Java 编程语言 函数式编程 集合框架 技术关键词: Stream API 中间操作 终结操作 惰性求值 并行

    学习函数式编程的人员 数据处理与分析领域的从业者 使用场景及目标: 数据过滤与转换:快速筛选和转换集合中的数据。 性能优化:利用并行流提高大数据集处理的性能。 简化代码:减少冗余代码,提高可读性和可维护性...

    java编程主要函数的用法详解

    在Java编程中,函数是实现特定任务的基本单元,掌握主要函数的用法对于提高编程效率至关重要。本教程将深入讲解Java中的关键函数,帮助开发者更好地理解和运用。 1. **构造函数** 构造函数是类的一个特殊方法,...

    java语言程序设计 电子书

    此外,文件I/O操作也是Java编程中的常见任务,包括读写文件、处理流等。 集合框架是Java库中的重要组成部分,书中会介绍ArrayList、LinkedList、HashSet、HashMap等数据结构的使用,以及接口和泛型的概念。Java的...

    Java 8函数式编程1

    函数式编程倾向于使用不可变数据结构,这减少了并发编程中的同步问题,使得代码更易于理解和调试。Java 8中的Optional类就是一个示例,它帮助开发者更好地处理null值,减少了空指针异常。 8. **测试和调试** ...

Global site tag (gtag.js) - Google Analytics