当前位置: 首页 > news >正文

Scala总结(四)

函数式编程

scala既有java的面向对象编程也有c语言得到函数式编程,两者相互交融

  1. 面向对象编程:解决问题,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题
  2. 函数式编程:解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题

函数基础

函数基本语法

实例

定义一个函数,实现将传入的名称打印出来

运行结果:

函数和方法的区别

为完成某一功能的程序语句的集合,称为函数

类中的函数称之方法

案列

函数定义

  • 无参,无返回值

  • 无参,有返回值

  • 有参,无返回值

  • 有参,有返回值

  • 多参,无返回值

  • 多参,有返回值

案列

运行结果:

函数参数

运行结果:

函数至简原则

至简原则:能省则省

  1. return 可以省略,Scala 会使用函数体的最后一行代码作为返回值
  2. 如果函数体只有一行代码,可以省略花括号

  3. 返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)

  4. 如果有 return,则不能省略返回值类型,必须指定
  5. 如果函数明确声明unit,那么即使函数体中使用 return 关键字也不起作用

  6. Scala 如果期望是无返回值类型,可以省略等号

  7. 如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加

  8. 如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略

  9. 如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略

实例:

运行结果:

 

函数高级

高阶函数

函数除定义函数、调用函数外还有高阶用法(传递)

1.函数可以作为值进行传递

运行结果·:

2.函数可以作为参数进行传递

运行结果:

3.函数可以作为函数返回值返回

匿名函数

没有名字的函数就是匿名函数。

(x:Int)=>{函数体}

x:表示输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑

传递匿名函数至简原则:

  1. 参数的类型可以省略,会根据形参进行自动的推导
  2. 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过 1 的永远不能省略圆括号。
  3. 匿名函数如果只有一行,则大括号也可以省略
  4. 如果参数只出现一次,则参数省略且后面参数可以用_代替

函数柯里化&闭包

闭包:函数式编程的标配

闭包:如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和他所处的环境,称为闭包

函数柯里化:把一个参数列表的多个参数,变成多个参数列表

实例:

运行结果:

递归

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

// 阶 乘

// 递归算法

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

运行结果:

控制抽象

Java 只有值调用;Scala 既有值调用,又有名调用

运行结果:

惰性加载

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

运行结果:

注:lazy 不能修饰 var 类型的变量

 

 

 

http://www.dtcms.com/a/112430.html

相关文章:

  • 基于SpringBoot的水产养殖系统【附源码】
  • 双轴注意力+多分辨率成像:TIMEMIXER++在时序建模领域再创佳绩
  • ffmpeg 使用不同编码器编码hevc的速度
  • 睡不着锻炼贴士补充
  • AI时代下的代理IP新机遇:解锁数据、安全与效率的隐形密码
  • 哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
  • 【力扣hot100题】(052)课程表
  • 零基础快速部署网站:使用宝塔面板一键安装 LNMP/LAMP 环境实战教程
  • 从零用java实现 小红书 springboot vue uniapp (11)集成AI聊天机器人
  • WPF 登录页面
  • 基于 SpringBoot 的社区维修平台
  • SQL Server安装后 Reporting Services 配置失败
  • Linux终端命令学习笔记(一)
  • 【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
  • Geek Uninstaller 卸载工具-小巧便捷高效 Windows中文版
  • Python爬虫第1节-HTTP基本原理
  • python连接PostgreSQL 数据库操作类优化
  • Pycharm v2024.3.4 Windows Python开发工具
  • MinIO中的纠删码是什么
  • 正则入门到精通
  • 基于 LangChain 搭建简单 RAG 系统
  • Mysql 中的两阶段提交
  • HTML应用指南:利用POST请求获取三大运营商5G基站位置信息(一)
  • 2025-04-04 Unity 网络基础5——TCP分包与黏包
  • Windows 安装和使用 ElasticSearch
  • Git提交本地项目到Github
  • vue+form实现flappybird
  • 迅饶科技X2Modbus网关-GetUser信息泄露漏洞
  • Mysql 中 B 树 vs B+ 树
  • SQL Server 2022 脏读问题排查与思考