千家信息网

Scala编程之惰性函数

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,一、为什么需要惰性函数惰性计算(尽可能延迟表达式求值)是许多函数式编程语言的特性。惰性集合在需要时提供其元素,无需预先计算它们,这带来了一些好处。首先,您可以将耗时的计算推迟到绝对需要的时候。其次,您
千家信息网最后更新 2025年02月23日Scala编程之惰性函数

一、为什么需要惰性函数

惰性计算(尽可能延迟表达式求值)是许多函数式编程语言的特性。惰性集合在需要时提供其元素,无需预先计算它们,这带来了一些好处。首先,您可以将耗时的计算推迟到绝对需要的时候。其次,您可以创造无限个集合,只要它们继续收到请求,就会继续提供元素。函数的惰性使用让您能够得到更高效的代码。Java并没有为惰性提供原生支持, Scala提供了,使用很方便。

二、java实现懒加载

懒汉式

public class LazyDemo {    private String property;  //属性也可能是一个数据库连接,文件等资源    public String getProperty(){        if (property==null){            property=initProperty();  //如果没有初始化过,那么进行初始化        }            return property;    }    private String initProperty() {        return "property";    }}

三、惰性函数介绍

当函数被声明为lazy的时候,函数并不会立即执行,而是当我们首次对这个函数进行调用了,我们才会执行这个函数。所以我们把这个叫做惰性函数(在java中叫做懒加载)。

四、案例

代码一:

object LazyDemo {  def main(args: Array[String]): Unit = {  val res= sum(10,20) //没有lazy的修饰,这个函数就是eager的    println("================")   // println("res:"+res)  }  def sum(a:Int,b:Int):Int={    println("sum执行了")    a+b  }}

输出: ================
sum执行了
res:30
代码二:

object LazyDemo {  def main(args: Array[String]): Unit = {   lazy val res= sum(10,20) // lazy修饰,sum()函数不会被立即执行,要首次被调用之后再执行    println("================")   // println("res:"+res)  }  def sum(a:Int,b:Int):Int={    println("sum执行了")    a+b  }}

输出: ================

代码二:

object LazyDemo {  def main(args: Array[String]): Unit = {   lazy val res= sum(10,20) // lazy修饰,sum()函数不会被立即执行,要首次被调用之后再执行    println("================")    println("res:"+res)      //调用sum方法  }  def sum(a:Int,b:Int):Int={    println("sum执行了")    a+b  }}

输出: ================
sum执行了
res:30

综上我们可以看出,scala中被lazy修饰之后,可以实现懒加载,这在大数据项目中数据的加载计算会非常有用!!

五:注意

1)lazy不能修饰var类型变量
2)函数被lazy修饰后,会导致函数的运行被推迟,我们在声明一个变量,如果给变量加个lazy,那么变量的声明也会被推迟,只有被使用时才会声明生效。例如:

scala> val a=100a: Int = 100scala> lazy val b=1000b: Int = scala> println(b)1000
函数 惰性 代码 变量 输出 元素 数据 时候 编程 只有 大数 好处 就是 尽可能 属性 懒汉 数据库 文件 方法 有用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 学习通连接服务器失败的图片 河北工控软件开发正规平台 服务器进pe后只显示1块硬盘 地下城与勇士是什么软件开发的 学习网络安全后的心得体会 安畅网络技术领先 数据库bit 类型 lol游戏服务器连接不上 华为服务器售后服务管理 银保监会网络安全等级保护 软件开发工程师招聘简章 数据库技术的研究内容 黄浦区推广软件开发包括什么 js函数存到数据库 湘潭网络安全人才与创新基地 sql导出整个数据库 慈溪顺通网络技术公司 台式机如何做网吧服务器 怎么在服务器里边加上材质包 腾讯云服务器不注销会怎么样 软件开发女孩多吗 网络安全获奖手抄报内容 QC支持什么数据库 陕西松毅软件开发年终奖 服务器抓sftp包 公安系统网络技术维护 加强自然灾害风险基础数据库建设 绍兴app软件开发企业 腾讯云服务器不注销会怎么样 图数据库中扩展顶点hop
0