Dart的控制流程语句跟其他编程语言类似,这里就不一一记录了,只记录需要注意的特殊点。
if
Dart 的 if 语句中的条件必须是一个布尔值,不能是其它类型。详情请查阅布尔值。
for
在 Dart 语言中,for 循环中的闭包会自动捕获循环的 索引值 以避免 JavaScript 中一些常见的陷阱。假设有如下代码:
var callbacks = [];
for (var i = 0; i < 2; i++) {
callbacks.add(() => print(i));
}
callbacks.forEach((c) => c());
上述代码执行后会输出 0 和 1,但是如果在 JavaScript 中执行同样的代码则会输出两个 2。
如果要遍历的对象实现了 Iterable 接口,则可以使用 forEach() 方法,如果不需要使用到索引,则使用 forEach
方法是一个非常好的选择:
candidates.forEach((candidate) => candidate.interview());
Iterable
如果像 List 或 Set 一样实现了 Iterable 接口则可以简单地使用下述写法:
candidates
.where((c) => c.yearsExperience >= 5)
.forEach((c) => c.interview());
断言
在开发过程中,可以在条件表达式为 false 时使用 - assert(条件, 可选信息); - 语句来打断代码的执行,下面是相关示例:
// 确保变量值不为 null (Make sure the variable has a non-null value)
assert(text != null);
// 确保变量值小于 100。
assert(number < 100);
// 确保这是一个 https 地址。
assert(urlString.startsWith('https'));
assert 的第二个参数可以为其添加一个字符串消息。
assert(urlString.startsWith('https'),
'URL ($urlString) should start with "https".');
assert
的第一个参数可以是值为布尔值的任何表达式。如果表达式的值为 true,则断言成功,继续执行。如果表达式的值为 false,则断言失败,抛出一个 AssertionError 异常。
如何判断 assert 是否生效?assert 是否生效依赖开发工具和使用的框架:
-
Flutter 在调试模式时生效。
-
一些开发工具比如 dartdevc 通常情况下是默认生效的。
-
其他一些工具,比如 dart 以及 dart2js 通过在运行 Dart 程序时添加命令行参数
--enable-asserts
使 assert 生效。
在生产环境代码中,断言会被忽略,与此同时传入 assert 的参数不被判断。
网友评论