Scala 懒惰评估
懒惰评估或按需调用是一种评估策略,表达式在第一次使用前不会被评估,即推迟评估到需要时再进行。像 Haskell 这样的函数式编程语言广泛使用这种策略。 C、C++ 被称为严格语言 ,它们在表达式被声明后立即进行评估。还有像Scala这样的语言,默认情况下是严格的,但如果明确指定为混合类型,也可以是懒惰的。
让我们看一个Scala的例子。
没有懒惰:
val geeks = List(1, 2, 3, 4, 5)
val Output = geeks.map(l=> l*2)
println(Output)

一旦对其进行操作,就会计算出输出的值。
有了懒惰:
val geeks = List(1, 2, 3, 4, 5)
lazy val Output2 = geeks.map(l=> l*5)
println(Output2)

在我们使用输出2之前,也就是在 println(Output2) 之前,这个值是没有被计算出来的。
为什么要偷懒计算
在这个例子中,如果我们从未使用过输出值呢?我们浪费了我们的map操作(CPU计算),当我们写更复杂和更大的代码时,这可能是非常昂贵的。在这里,懒人求值可以帮助我们优化过程,只在需要的时候评估表达式,避免不必要的开销。
优点:
- 优化了计算过程。Spark是一个大数据计算引擎,它的核心就是使用这种技术。
- 懒人评估可以帮助我们解决循环依赖关系。
- 提供了对无限数据结构的访问。
- 允许将代码模块化为多个部分。
- 程序员失去了对其代码执行顺序的控制,因为一些表达式被评估,而另一些则不被评估,这取决于需求。
缺点:
- 由于程序员无法控制程序的执行,寻找错误可能很困难。
- 可能会增加空间的复杂性,因为所有的指令(操作)都必须存储。
- 与传统方法相比,更难编码。
极客教程