Scala_【5】函数式编程

第五章

  • 函数式编程
  • 函数和方法的区别
  • 函数声明
  • 函数参数
    • 可变参数
    • 参数默认值
  • 函数至简原则
  • 匿名函数
  • 高阶函数
    • 函数作为值传递
    • 函数作为参数传递
    • 函数作为返回值
  • 函数闭包&柯里化
  • 函数递归
  • 控制抽象
  • 惰性函数
  • 友情链接

函数式编程

面向对象编程
解决问题时,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题,Scala语言是一个完全面向对象编程语言。万物皆对象
函数式编程
解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题,Scala语言是一个完全函数式编程语言。万物皆函数

函数和方法的区别

核心概念

  1. 为完成某一功能的程序指令(语句)的集合,称为函数
  2. 类中的函数称之方法

实际应用

  1. Scala语言的语法非常灵活,可以在任何的语法结构中声明任何的语法
  2. 函数没有重载和重写的概念;方法可以进行重载和重写
  3. scala中函数可以嵌套定义

函数声明

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

函数参数

可变参数

在这里插入图片描述

参数默认值

在这里插入图片描述

函数至简原则

函数至简原则:能省则省

在这里插入图片描述

  • 如果函数明确声明Unit,那么即使函数体中使用return关键字也不起作用
  • 如果函数明确使用return关键字,那么函数返回就不能使用自行推断了,需要声明返回值类型
  • Scala如果想要自动推断无返回值,可以省略等号

匿名函数

没有名字的函数就是匿名函数,可以直接通过函数字面量(表达式)来设置匿名函数
函数字面量定义格式:
val sum: (Int, Int) => Int = (x: Int, y: Int) => x + y

在这里插入图片描述

高阶函数

函数作为值传递

在这里插入图片描述

函数作为参数传递

在这里插入图片描述

函数作为返回值

在这里插入图片描述

函数闭包&柯里化

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

函数递归

一个函数/方法在函数/方法体内又调用了本身,我们称之为递归调用

/*** 1) 方法调用自身* 2) 方法必须要有跳出的逻辑* 3) 方法调用自身时,传递的参数应该有规律* 4) scala中的递归必须声明函数返回值类型*/

在这里插入图片描述

控制抽象

在这里插入图片描述

惰性函数

当函数返回值被声明为lazy时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。这种函数我们称之为惰性函数

在这里插入图片描述

友情链接

  • 上一章
    Scala_【4】流程控制
  • 下一章
    Scala_【6】面对对象

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

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

相关文章

golang:微服务架构下的日志追踪系统(二)

背景 在使用Gin框架进行服务开发时,我们遇到了一个日志记录的问题。由于Gin的上下文(*gin.Context)实现了context.Context接口,在调用日志记录器的Info、Warn、Error等方法时,直接传递Gin的上下文通常不会导致编译错误…

美国宏观经济基础框架梳理

玩转币圈和美股,最关键的是理解美国宏观经济。以下是核心逻辑:美国经济数据→政策调整→资金流动→资产价格变化。掌握这些因素的关系,才能在市场中立于不败之地。 一、核心变量及其意义 1. GDP(国内生产总值) • …

Java Map集合、集合的嵌套

一. 概述 1. Map集合称为双列集合,格式:{key1value1, key2value2,.....},一次需要存一对数据作为一个元素。 2. Map集合的每个元素"keyvalue"称为一个键值对/键值对对象/一个Entry对象,Map集合也被称为"键值对集合"。 3.…

spring防止重复点击,两种注解实现(AOP)

第一种:EasyLock 简介 为了简化可复用注解,自己实现的注解,代码简单随拿随用 使用方式 1.创建一个注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface EasyLock {long waitTime() default …

微服务拆分的艺术:构建高效、灵活的系统架构

目录 一、微服务拆分的重要性 二、微服务拆分的策略 1. 按照业务领域拆分 2. 按照团队结构拆分 3. 按照业务边界拆分 4. 按照数据和数据库拆分 5. 按照用户界面或外部接口拆分 6. 按照功能模块或领域驱动设计拆分 7. 按照性能和可伸缩性需求拆分 三、微服务拆分的实践…

中建海龙:科技助力福城南产业片区绿色建筑发展

在快速发展的城市化进程中,绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业,中建海龙科技有限公司(简称“中建海龙”)凭借其卓越的科技实力和创新举措,在推动绿色建筑发展方面做出了…

大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据

大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据 文本/图片/表格,分别提取处理工具选择不同格式文件,使用不同工具处理1. 确认目标2. 分析过程(目标-手段分析法)3. 实现步骤4. 代码封装效果展…

三甲医院等级评审八维数据分析应用(五)--数据集成与共享篇

一、引言 1.1 研究背景与意义 随着医疗卫生体制改革的不断深化以及信息技术的飞速发展,三甲医院评审作为衡量医院综合实力与服务水平的重要标准,对数据集成与共享提出了更为严苛的要求。在传统医疗模式下,医院内部各业务系统往往各自为政,形成诸多“信息孤岛”,使得数据…

论文泛读《LPFHE: Low-Complexity Polynomial CNNs for Secure Inference over FHE》

文章目录 1、摘要2、介绍3、文章结构4、总结 1、摘要 Machine learning as a service (MLaaS) 在客户中越来越受欢迎。为了解决 MLaaS 中的隐私问题,引入了 FHE 来保护客户端的数据。  然而,FHE 不能直接评估 卷积神经网络 (CNNs) 中的非算数激活函数。…

Redission红锁

目录 一、什么是红锁 二、Redission红锁的使用 一、什么是红锁 Redis 的作者 Salvatore Sanfilippo(又名 antirez)提出的一种基于多个 Redis 实例实现分布式锁的算法。红锁(Redlock)旨在解决单点故障问题,即当使用单…

VTK 鼠标+键盘重构

1、鼠标事件 如果有鼠标事件处理等相应的需求,可以重写该事件。 void OnMouseMove() override; //鼠标移动事件 void OnLeftButtonDown() override;//左键按下事件 void OnLeftButtonUp() override;//左键抬起事件 void OnMiddleButtonDown() override;//滚轮按下事件 …

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察,必备的几样东西是什么吗?其实这也是面试中考察求职者,是否真的做过系统开发和上线的必备问题。包括:服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志,如果…

node内置模块之---path 模块

path 模块的作用 path 模块是 Node.js 的核心模块之一,提供了用于处理和转换文件路径的功能。它能帮助你在不同操作系统间处理文件路径时避免平台差异(如 Windows 和 Unix 系统使用不同的路径分隔符) path 模块api介绍 使用场景: …

STM32G0B1 can Error_Handler 解决方法

问题现象 MCU上电,发送0x13帧数据固定进入 Error_Handler 硬件介绍 MCU :STM32G0B1 can:NSI1042 tx 接TX RX 接RX 折腾了一下午,无解,问题依旧; 对比测试 STM32G431 手头有块G431 官方评估版CAN 模块; 同样的…

在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)

我的github分支!!! 你可以在这里找到相对应的源码。 DWDROME的MOGI分支 来源于!! MOGI-ROS/Week-3-4-Gazebo-basics 学习分支整理日志 分支概述 这是一个用于个人学习的新分支,目的是扩展基本模型并添加…

Redis 实现分布式锁

文章目录 引言一、Redis的两种原子操作1.1 Redis 的原子性1.2 单命令1.3 Lua 脚本1.4 对比单命令与 Lua 脚本 二、Redis 实现分布式锁2.1 分布式锁的概念与需求2.1.1 什么是分布式锁?2.1.2 分布式锁的常见应用场景 2.2 基于 Redis 的分布式锁实现2.2.1 锁的获取与释…

区块链与微服务研究报告

摘要 区块链与微服务架构的结合为现代企业级应用提供了新的解决方案。区块链技术以其不可篡改性和透明性,解决了微服务在分布式环境下的数据一致性和安全性问题。本文将探讨区块链与微服务的基本概念、技术原理、应用案例以及未来研究方向。 1. 引言 随着信息技术…

SAP MM物料管理模块常见BAPI函数清单

【SAP系统研究】 #SAP #MM #物料管理 #函数 #BAPI 1、物料主数据 BAPI_MATERIAL_SAVEDATA 创建/更改物料主数据 BAPI_MATERIAL_SAVEREPLICA 物料主数据视图扩充 BAPI_MATERIAL_EXISTENCECHECK 检查物料主数据是否存在 BAPI_MATERIAL_GETLIST 显示物料主数据明细 BAPI_MATERIALG…

Stable Diffusion和Midjourney有什么区别?

Stable Diffusion 和 Midjourney 主要有以下区别: 目录 费用与可访问性 设备要求 安装与使用 学习成本 图像生成效果 可控性与定制性 私密性 费用与可访问性 Stable Diffusion:开源免费,任何人都可以免费下载并自行部署使用&#xf…

104周六复盘 (188)UI

1、早上继续看二手书的一个章节,程序开发流程、引擎、AI等内容, 内容很浅,基本上没啥用,算是复习。 最大感触就是N年前看同类书的里程碑、AI相关章节时,会感觉跟自己没啥关系, 而如今则密切相关&#xf…