4 Star 6 Fork 4

D语言中文社区 / Programming-in-D

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
lazy_operators.d 2.44 KB
一键复制 编辑 原始数据 按行查看 历史
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
D
1
https://gitee.com/DlangRen/Programming-in-D.git
git@gitee.com:DlangRen/Programming-in-D.git
DlangRen
Programming-in-D
Programming-in-D
master

搜索帮助