函数式编程框架 functionaljava 简介

文章目录

      • 一、函数式编程起源
      • 二、functionaljava 框架简介

一、函数式编程起源

​ 函数式编程起源于数理逻辑(范畴论,Category Theory),起源于λ演算,这是一种演算法,它定义一些基础的数据结构,然后通过归约和代换来实现更复杂的数据结构,而函数本身也是它的一种数据。所以函数式编程语言( Scala、Groovy、Clojure 、Haskell 等)中引入了一些数学上抽象的知识,需要借助于相关知识来辅助学习。

λ演算是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。它由数学家阿隆佐·邱奇在 20 世纪 30 年代首次发表。lambda 演算作为一种广泛用途的计算模型,可以清晰地定义什么是一个可计算函数,而任何可计算函数都能以这种形式表达和求值,它能模拟单一磁带图灵机的计算过程;尽管如此,lambda演算强调的是变换规则的运用,而非实现它们的具体机器。

—摘自于 wikipedia

函数式编程的特性如下(下面介绍的 functionaljava 框架基本实现了这些特性):

  • 函数是一等公民
  • 闭包和高阶函数
  • 惰性(Lazy)计算:每一步都是单纯的运算,而且都有返回值。
  • 纯函数:输入一定时,输出一定。即输出不受外部环境影响,同时也不影响外部环境,无副作用。
  • 递归调用
  • 函数柯里化:函数元降维技术
  • Immutable 不可变性
  • Composition 函数组合:将多个单函数进行组合,像流水线一样工作

这里讲述函数式编程起源的原因是为了更好地理解函数式编程:λ演算是函数式编程的基础(比如λ演算能模拟单一磁带图灵机的计算过程),编程式语言都具备λ演算的规则和特性。

二、functionaljava 框架简介

​ JDK8 引入了 lambda 表达式,吸收了函数式编程的部分特性,目的是对现有编码语义的优化,减少语法冗余。轻量级的将代码封装为数据,使代码简洁,易于理解。但 Java 非函数式编程语言。(有兴趣的同学可结合函数式编程的起源来理解 JDK8 的 lambda 表达式使用)。functionaljava 框架是一个提升 Java 函数式编程的开源库,该库实现了许多基本和高级编程抽象,有助于面向组合式的开发。该框架同样可以作为学习函数式编程概念的平台。

​ 学习一种新概念需要进行思维的转变,函数式编程不同于面向对象编程,最好结合 functionaljava 中的 demo 和源码来理解函数式编程思想。以下是 functionaljava 框架的知识图谱:

在这里插入图片描述
在这里插入图片描述

附:functionaljava github 地址:https://github.com/functionaljava/functionaljava

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/195780.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】网络编程基础—InetAddress类和URL编程

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:为了那个远方,你要奋不顾身 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 一.&#x…

Python编程技巧 – 使用字符串(Strings)

Python编程技巧 – 使用字符串(Strings) Python Programming Essentials – Using Strings 本文简要介绍如何使用字符串,来进行Python编程。字符串有很多用途,包括输出结果、反馈状态、数据处理以及切片和文本筛选等 1. 字符串 字符串(St…

Java21新增特性

版本介绍 Java 21是Java平台的一个新版本,于2023年9月19日由Oracle公司正式发布。这个版本包含了数千个性能、稳定性和安全性更新,以及几十个新功能和增强。其中,15个增强被赋予了自己的JDK增强提案(JEP),…

基于SSM的北海旅游网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

CICD 持续集成与持续交付——jenkins

部署 软件下载:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ [rootcicd2 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm[rootcicd2 ~]# yum install -y fontconfig[rootcicd2 ~]# rpm -ivh jenkins-2.432-1.1.noarch.rpm启动服务 [rootcicd2 ~]# systemctl…

python线程和进程

文章目录 版权声明多任务并发概念并行概念 进程多线程的作用进程的创建步骤通过进程类创建进程对象进程执行带有参数的任务获取进程杀死进程进程间不共享全局变量主进程和子进程的结束顺序设置守护进程销毁子进程 线程线程的创建步骤通过线程类创建线程对象线程执行带有参数的任…

T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强(增加数据集中样本的多样性)三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 🍨 本文为🔗365天深度学习训练营 中的学习记录博客&#x1f…

数据结构【DS】队列

队列:只允许在表尾(队尾)进行插入,而在表头(队头)进行删除的线性表。 循环队列 初始(队空)时: 𝑸.𝒇𝒓𝒐𝒏𝒕𝑸.𝒓𝒆𝒂&am…

H110主板搭配魔改QNCW升级小记

最近搬家完毕,翻出来一块闲置已久的qncw,隐约记得是买的主板套装,现在主板早已不知踪影,剩下孤零零一个CPU,一起翻出来一个G3900T亮机CPU,应该是同时代的产物。 qncw百度上一搜,发现参数还行&am…

Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefilemake详解

编译器—gcc/g、调试器—gdb以及自动化构建工具—makefile&&make 文章目录 编译器—gcc/g、调试器—gdb以及自动化构建工具—makefile&&make1. 编译器——gcc/g1.1 生成可执行文件与修改默认可执行文件1.2 程序的翻译过程以及对应的gcc选项1.2.1 预处理 gcc -E…

AD教程 (十九)PCB板框的评估和层叠设置

AD教程 (十九)PCB板框的评估和层叠设置 板子越小,层数越少,成本越低 PCB板框评估 器件摆放 CtrlA 选中全部器件点击工具,选择器件摆放,选择在矩形区域排列 框定矩形区域,器件就会摆放在框定的矩…

【Flink】窗口(Window)

窗口理解 窗口(Window)是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中,再对每个“桶”加以处理。 本文的重心将放在 Flink 如何进行窗口操作以及开发者如何尽可能地利用 Flink 所提供的功能。 对窗口的正确理解&#xff…