Java必知必会之函数式编程

简介: 函数式编程的两点基本主张1、函数是第一等公民2、纯函数

一、函数式编程特性
函数式编程的两点基本主张
1、函数是第一等公民
2、纯函数

这两点是函数式编程的基础,他带来了更高层次的模块化代码手段,是单元测试工程师的梦想天堂。

在以上基本主张之上,函数式编程带来了诸多酷炫的技术:

利用 Memorization 提升性能

利用 惰性求值 写出更好的模块化代码

使用 curry 配合 函数组合

函数是 第一等公民 就不赘述了,那么我们来看看什么是纯函数?

二、纯函数
除了将函数视作 “一等公民”,函数式编程语言还主张甚至强制将函数写成纯函数 (pure function)。

纯函数是指同时满足下面两个条件的函数:

函数的结果只依赖于输入的参数且与外部系统状态无关——只要输入相同,返回值总是不变的。

除了返回值外,不修改程序的外部状态(比如全局变量、入参)。——满足这个条件也被称作“没有函数副作用 (side effect)”

由纯函数的两点条件可以看出,纯函数是相对独立的程序构件。因为函数的结果只依赖于输入的参数且与外部系统状态无关,使得单元测试和 debug 变得异常容易,而这也正是模块化的优点之一。

比如,若应用了函数式编程,我们不必担心 doSomething 后 data 会改变。

更多函数式编程知识及Java面试技巧访问 shimo.im/docs/TMW7MLYbqiQBwvM8

三、引用透明
当人们讨论函数式编程的时候,常常会提到一个词——引用透明(Referential transparency)。其实引用透明的概念与纯函数很接近:

如果一个表达式,对于相同的输入,总是有相同的结果并且不修改程序其他部分的状态,那么这个表达式是引用透明的。

由前面纯函数的定义可以看到,由于函数调用也是表达式的一种,因此任何纯函数的调用都满足引用透明

相关文章
|
14天前
|
Java 数据处理 API
Java 函数式编程:概念、优势与实战示例
【4月更文挑战第27天】函数式编程(Functional Programming,简称 FP)是一种编程范式,它将计算视为数学函数的求值并避免使用程序状态以及可变数据。
22 1
|
14天前
|
并行计算 Java API
【专栏】Java 8的Lambda表达式增强了函数式编程,允许以匿名函数形式传递行为
【4月更文挑战第27天】Java 8的Lambda表达式增强了函数式编程,允许以匿名函数形式传递行为。其基本语法`(params) -> expression/statements`,类型由参数推断,可引用final或effectively final的外部变量。Lambda广泛应用于集合操作(如Stream API)、并行流处理和GUI事件处理,简化代码并提高效率。通过实例,展示了Lambda在集合筛选、并行计算和事件处理中的应用,从而提高开发质量和效率。
|
23天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。
|
1月前
|
Java API 开发者
Java 8新特性之函数式编程实战
【4月更文挑战第9天】本文将深入探讨Java 8的新特性之一——函数式编程,通过实例演示如何运用Lambda表达式、Stream API等技术,提高代码的简洁性和执行效率。
|
1月前
|
分布式计算 Java API
Java 8新特性详解:流处理与函数式编程
【4月更文挑战第2天】Java 8引入了流处理和函数式编程,革新了数据处理。流提供声明式处理,简化集合操作,利用filter、map等方法实现高效逻辑。Lambda表达式支持匿名函数,简化接口实现,配合函数式接口如Predicate和Function,增强代码简洁性。Optional类处理可能为空的值,防止空指针异常。新日期时间API和并行流进一步强化了函数式编程。这些特性提升了Java的效率和可读性,助力开发更优质的应用。
|
2月前
|
Java API
Java中的Lambda表达式和函数式编程
传统的Java编程方式在处理一些简单的逻辑时显得繁琐,而Lambda表达式的引入为我们提供了一种更加简洁、灵活的编程方式。本文将介绍Lambda表达式和函数式编程在Java中的应用以及其与传统编程方式的对比,帮助读者更好地理解并运用这一特性。
9 0
|
2月前
|
JavaScript Java 程序员
Java 8新特性解析:Lambda表达式与函数式编程
【2月更文挑战第12天】 本文深入探讨Java 8引入的两大革命性特性:Lambda表达式和函数式编程接口,旨在为Java开发者提供一个清晰的指南,帮助他们理解和应用这些新特性以提升代码的简洁性和效率。通过对Lambda表达式的基本概念、语法及其与函数式接口的结合使用进行详细分析,本文展示了如何利用这些新特性来编写更加简洁、易读且易于维护的代码。同时,文章还将通过实例探讨Lambda表达式在实际开发中的应用,包括在集合处理、事件监听和并发编程等方面的具体使用场景,以期让读者能够充分理解并有效利用Java 8的这些新工具,从而在日常开发工作中提高效率。
|
3月前
|
Java 编译器
如何在Java中使用Lambda表达式实现函数式编程
Lambda表达式是Java 8中引入的一种新的语法,它可以使我们以更简洁的方式编写函数式代码。本文将介绍如何在Java中使用Lambda表达式实现函数式编程,并通过实例展示其优点。
19 3
|
4月前
|
Java 编译器 API
【Java】lambda表达式,Stream API,函数式编程接口
【Java】lambda表达式,Stream API,函数式编程接口
34 0
|
4月前
|
设计模式 Java 编译器
Java 设计模式最佳实践:一、从面向对象到函数式编程
Java 设计模式最佳实践:一、从面向对象到函数式编程
65 0