码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 函数式编程框架 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

  • 相关阅读:
    vue pc端/手机移动端 — 下载导出当前表格页面pdf格式
    java项目-第147期ssm社区生活超市管理系统_(spring+springmvc+mybatis+jsp)_java毕业设计_计算机毕业设计
    QT 绘画功能的时钟
    Jenkins 内置变量 和变量作用域
    第7章 C语言的系统复习 (七)
    数据可视化-ECharts Html项目实战(14)
    记一次mongo查询时间从大于30多秒优化到100ms的过程
    FB广告系列花费上限是否有必要设置?
    聚焦数据库和新兴硬件的技术合力 中科驭数受邀分享基于DPU的数据库异构加速方案
    ssm框架的网上招聘系统的设计与实现,ssm框架,java编程,mysql数据库 myeclipse开发平台
  • 原文地址:https://blog.csdn.net/zhuqiuhui/article/details/134498663
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号