代码拉取完成,页面将自动刷新
Ddoc
$(DERS_BOLUMU $(IX 惰性求值) 惰性运算符)
$(P
惰性求值即推迟表达式的执行,直到需要表达式的值。惰性求值是许多语言的基础特性。
)
$(P
如果结果最终并不需要,延迟求值自然可以让程序运行得更快。
)
$(P
$(IX 短路求值) 下面的运算符短路行为与惰性求值是相似的概念:
)
$(UL
$(LI $(IX ||, 短路) $(IX 逻辑或运算符) $(C ||) ($(I 或))运算符:第二个表达式只有在第一个表达式为 $(C false) 时才会执行。
---
if (anExpression() || mayNotBeEvaluated()) {
// ...
}
---
$(P
如果 $(C anExpression()) 的结果是 $(C true), 那么 $(C ||) 表达式的结果就一定是 $(C true)。因为我们不需要对第二个表达式求值来确定 $(C ||) 表达式的结果,所以第二个表达式不会被求值。
)
)
$(LI $(IX &&, 短路) $(IX 逻辑与运算符) $(C &&) ($(I 与))运算符:第二个表达式只有在第一个表达式为 $(C true) 时才会执行。
---
if (anExpression() && mayNotBeEvaluated()) {
// ...
}
---
$(P
如果 $(C anExpression()) 的结果是 $(C false),那么 $(C &&) 表达式的结果必然是 $(C false),因此第二个表达式不会被求值。
)
)
$(LI $(IX ?:, 短路) $(IX 三元运算符) $(IX 条件运算符) $(C ?:) ($(I 三元))运算符:第一个或第二个表达式是否被执行分别依赖于条件是 $(C true) 还是 $(C false)。
---
int i = condition() ? eitherThis() : orThis();
---
)
)
$(P
这些运算符的惰性不仅仅是与性能相关。有时,执行表达式会发生错误。
)
$(P
例如,如果字符串是空的,下面的条件$(I 第一个字符是 A) 会出错:
)
---
dstring s;
// ...
if (s[0] == 'A') {
// ...
}
---
$(P
为了正确的访问 $(C s) 的第一个元素,我们首先要确认字符串里的确有那个元素。因此,下面的条件把有潜在错误的逻辑表达式放在了 $(C &&) 运算符的右边,确保其只有在安全的情况下才执行:
)
---
if ((s.length >= 1) && (s[0] == 'A')) {
// ...
}
---
$(P
惰性求值可以通过 $(LINK2 /ders/d.cn/lambda.html, 函数指针, delegate) 完成,也可以用 $(LINK2 /ders/d.cn/ranges.html, range)。我们会在后面的章节见到这些。
)
Macros:
SUBTITLE=惰性运算符
DESCRIPTION=D 编程语言中的惰性(短路)运算符。
KEYWORDS=d 编程 语言 教程 惰性 lazy
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。