Scala 05 —— 函数式编程底层逻辑

这篇具有很好参考价值的文章主要介绍了Scala 05 —— 函数式编程底层逻辑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Scala 05 —— 函数式编程底层逻辑,Scala,scala,开发语言,后端
Scala 05 —— 函数式编程底层逻辑,Scala,scala,开发语言,后端

Scala 05 —— 函数式编程底层逻辑

该文章来自2023/1/14的清华大学交叉信息学院助理教授——袁洋演讲。

函数式编程

  • 什么是函数式编程?

    • y=f(x)
  • 无副作用:

    • y只是依赖x,不会依赖其他变量
    • 确定性关系:重新跑100次代码,得到的结果是一样的
    • 不会给世界带来副作用。算完f(x)然后就得到了y,其他什么都没变。
  • 什么是副作用?

    • 读写数据,人机交互,网络传输等等…本不应该出现在函数式编程中,它们可能会带来"脏东西"或不确定因素。

假如…副作用是必须的?

  • 把脏东西推到边缘去

    • 在代码核心使用纯函数式编程(无副作用)
      • 加减乘除求和等等…
    • 在代码边缘处做其他任务(有副作用)
      • 写数据库、与服务器通信、获取数据等等
        Scala 05 —— 函数式编程底层逻辑,Scala,scala,开发语言,后端
  • 有什么好处?

    • 至少我们对于代码核心能有更好的论证
    • 纯的函数式代码到底有多大好处?
  • 核心代码块一定要大!

    • 不应该只是min(x,y)

    • 不应该只是List(12,3,4,5,6),map(a=>a*a)

函数的定义

  • 函数式编程,函数的输入输出必须有清晰定义

    • 输入是什么,输出是什么?
    • 输入有哪些变量,它们分别是什么?
  • 定义模糊的例子:

    • y=f(x,y,?) :第三个参数可能不存在

    • 这种做法就不够函数式,因为它同时定义了

      • y=f(x,y,z)
      • y=f(x,y)
    • 但是可以这么写:y=f(x,y,z=null)

      • f有三个参数,第三个默认为null

函数是数据的函数,不是数字的函数

  • 基本类型的操作用的不多

  • 稍复杂的业务会涉及到更多自定义数据类型

  • 函数可以看作是一个范畴到另一个范畴直接的映射,即函子

  • 什么是范畴?

    • 范畴就是带有关系的集合
      • 有很多对象,对象与对象之间有关系
      • 可以表示世界万物
  • 函数式编程在范畴之间跳来跳去,函数式编程以范畴论为理论基础

  • 如何定义范畴?

    • 常用方法:OOP
  • OOP和FP是否矛盾?

    • 一个是操作对象

    • 一个是操作内容

    • 需求:实现从猫到狗的转变

      Scala 05 —— 函数式编程底层逻辑,Scala,scala,开发语言,后端

  • OOP和FP是互补的,相互结合的

    • OOP定义范畴内部的关系
    • FP定义范畴与范畴之间的关系
    • 两者垂直互补

如何把业务逻辑做成纯函数式?

  • 业务流程中的每个中间步骤的数据必须是良定义的(adj.的n.)
  • 数据与数据之间的转换过程是确定性的。(A->…操作->B)

Scala 05 —— 函数式编程底层逻辑,Scala,scala,开发语言,后端

函数式编程是声明式的,有效解耦

  • 声明式:我告诉你,我给你什么(输入),我要什么(输出),你怎么做的我不管

    • API接口给定,实现你做,我之后会来测试
  • 描述的不是一个业务需求,而是对象转换

    • 适合代码复用
  • 把一个长链条拆分成无数小的步骤

    • 每个步骤都比较简单(函数式),容易验证
  • 关注输入输出的对象而非过程,容易做到类型安全的严丝合缝

  • 函数式编程的理想步骤:
    1.定义业务逻辑中所有的数据格式
    2.定义所有数据与数据的转换操作函数
    3.根据业务逻辑要求,把函数串起来

  • 先定框架,再定逻辑

    • 是什么
    • 为什么
    • 怎么做
  • 实现会变得很容易,更适合AI自动编程

把业务逻辑看成流水线

  • 每个函数都是流水线的一环
  • 每一环都会将产品(数据)加工成另一个数据
    • 猫变成狗
  • 尽量不使用全局变量
    • 流水线上不会调用流水线之外的东西帮忙
  • 不要使用var,使用val
    • 函数式编程中没有变量,只有指代
    • 变量是实现的方式,但不是业务逻辑本身
    • 从范畴的角度很容易理解
  • 先做对,再做快:因为效率导致的问题通常很容易被修复

全局变量文章来源地址https://www.toymoban.com/news/detail-861540.html

  • 流水线上不会调用流水线之外的东西帮忙
  • 不要使用var,使用val
    • 函数式编程中没有变量,只有指代
    • 变量是实现的方式,但不是业务逻辑本身
    • 从范畴的角度很容易理解
  • 先做对,再做快:因为效率导致的问题通常很容易被修复
    Scala 05 —— 函数式编程底层逻辑,Scala,scala,开发语言,后端

到了这里,关于Scala 05 —— 函数式编程底层逻辑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你知道Scala编程语言吗?Scala基础教程【建议收藏】

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 Scala是一种

    2023年04月08日
    浏览(83)
  • Scala函数式编程【从基础到高级】

    目录 函数基础 基本语法 函数参数 函数至简原则 至简原则细节  函数高级 高阶函数 函数的3种高阶用法: 1、函数作为值传递 2、函数作为参数传递 匿名函数作参数传递 3、函数作为返回值传递 匿名函数的至简规则 高阶函数的应用  案例-将数组中的元素全部+1后返回  匿名

    2024年02月11日
    浏览(45)
  • 大数据开发语言Scala(一)——scala入门

    累了,基础配置不想写了,直接抄了→Scala的环境搭建 这里需要注意的是,创建新项目时,不要用默认的Class类,用Object,原因看→scala中的object为什么可以直接运行 package : 包,等同于java中的package object :,声明一个单例对象(伴生对象) main方法 :从外部可以直接

    2024年02月05日
    浏览(58)
  • Scala编程基础:表达式、函数、模式匹配与集合操作

    本文详细介绍了Scala编程的基础知识,包括表达式的使用,方法与函数的区别,模式匹配的各种模式,以及Scala Trait(特质)的定义和使用。

    2024年04月14日
    浏览(51)
  • 2023_Spark_实验七:Scala函数式编程部分演示

    1、Scala中的函数 在Scala中,函数是“头等公民”,就和数字一样。可以在变量中存放函数,即:将函数作为变量的值(值函数)。 2、匿名函数 3、带函数参数的函数,即:高阶函数 示例1: (*)首先,定义一个最普通的函数 (*)再定义一个高阶函数 (*)分析这个高阶函数

    2024年02月08日
    浏览(61)
  • 2023_Spark_实验九:Scala函数式编程部分演示

    需求: 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤: 1、文件单词规律(空格分开) 2、单词切分 3、单词的统计 (k,v)-(k:单词,V:数量) 4、打印 框架: 1、单例对象,main() 2、创建CONF 3、创建SC--读取文件的方式--》RDD 4、RDD进行处理 5、关闭资源 一、新

    2024年02月08日
    浏览(48)
  • Scala的函数式编程与高阶函数,匿名函数,偏函数,函数的闭包、柯里化,抽象控制,懒加载等

    函数式编程 解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题。 例如:请求-用户名、密码-连接 JDBC-读取数据库 Scala 语言是一个完全函数式编程语言。万物皆函数。 函数的本质:函数可以当做一个值进行传递

    2024年02月09日
    浏览(54)
  • 十分钟带汝入门大数据开发语言Scala

    大家好,我是百思不得小赵。 创作时间:2022 年 6 月 7 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀 今天是加入CSDN的第1193天。觉得有帮助麻烦👏点赞、🍀评论、❤️收藏 Scala是一门多范式的编程语言,一种类似Ja

    2024年02月02日
    浏览(56)
  • Scala面向对象编程(高级部分)

    (1)回顾Java中的静态概念 public static 返回值类型 方法名(参数列表) {方法体} 静态属性… 说明: Java中静态方法并不是通过对象调用的,而是通过类对象调用的,所以静态操作并不是面向对象的。 (2)Scala中静态的概念-伴生对象 ①Scala语言是完全面向对象(万物皆对象)的语言

    2024年02月09日
    浏览(52)
  • Scala集合常用函数 - 高级计算函数

    水善利万物而不争,处众人之所恶,故几于道💦   1. 过滤 - filter   2. 转换/映射 - map   3. 扁平化 - flatten   4. 扁平化+映射 - flatMap   5. 分组 - groupBy   6. 简化(规约) - reduce   7. 折叠 - fold   8. 函数小练习 1. 过滤 - filter  遍历一个集合并从中获取满足指定

    2024年02月17日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包