Scala 懒惰评估

Scala 懒惰评估

懒惰评估或按需调用是一种评估策略,表达式在第一次使用前不会被评估,即推迟评估到需要时再进行。像 Haskell 这样的函数式编程语言广泛使用这种策略。 C、C++ 被称为严格语言 ,它们在表达式被声明后立即进行评估。还有像Scala这样的语言,默认情况下是严格的,但如果明确指定为混合类型,也可以是懒惰的。

让我们看一个Scala的例子。

没有懒惰:

val geeks = List(1, 2, 3, 4, 5)

val Output = geeks.map(l=> l*2)

println(Output)

Scala  懒惰评估

一旦对其进行操作,就会计算出输出的值。

有了懒惰:

val geeks = List(1, 2, 3, 4, 5)

lazy val Output2 = geeks.map(l=> l*5)

println(Output2)

Scala  懒惰评估

在我们使用输出2之前,也就是在 println(Output2) 之前,这个值是没有被计算出来的。

为什么要偷懒计算

在这个例子中,如果我们从未使用过输出值呢?我们浪费了我们的map操作(CPU计算),当我们写更复杂和更大的代码时,这可能是非常昂贵的。在这里,懒人求值可以帮助我们优化过程,只在需要的时候评估表达式,避免不必要的开销。

优点:

  • 优化了计算过程。Spark是一个大数据计算引擎,它的核心就是使用这种技术。
  • 懒人评估可以帮助我们解决循环依赖关系。
  • 提供了对无限数据结构的访问。
  • 允许将代码模块化为多个部分。
  • 程序员失去了对其代码执行顺序的控制,因为一些表达式被评估,而另一些则不被评估,这取决于需求。

缺点:

  • 由于程序员无法控制程序的执行,寻找错误可能很困难。
  • 可能会增加空间的复杂性,因为所有的指令(操作)都必须存储。
  • 与传统方法相比,更难编码。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程