"lazy" 在编程意义上是什么意思?

What does "lazy" mean in programming sense?

在检查代码时,有时我会看到像 lazyLoadlazyActivationlazyInitLazyValue 这样的词。我目前正在编写 Java,并且 Java 中的大多数命名约定在许多来源中都有规定,但并不懒惰。所以我想知道 "lazy/lazily" 是否是一个约定,它是什么意思。

简而言之,"lazy" 意味着推迟一个动作直到有必要,如果有的话。如果永远不会使用操作的结果,则永远不会执行该操作,从而节省了一些工作。 pseudo-real Python 中想到的任意示例是:

import gettext_lazy

class Foo:
    bar = Baz(name=gettext_lazy('Baz label'))

这定义了一个 class 和 class 中有一个名称的字段。该名称通过 gettext 本地化为不同的语言。 gettext 需要加载一个翻译文件,将其解析到内存等。如果这个名称从未在任何地方使用(例如 print(Foo.bar.name)),那么所有加载文件的工作都将被浪费。此外,在这个 class 定义的时候,可能还没有决定我们稍后将使用什么语言环境来输出名称。

由于这两个原因,实际的评估和本地化将推迟到稍后的某个时间,直到确实有必要打印该名称。

您经常会在各种语言中找到更抽象的示例,例如 infinite lists 您仍然可以对其进行迭代,因为它们在(不存在的)结束之前永远不会被评估等等,但这是一个相当实际例子。