Dart

Dart - 流程控制语句

2019-12-18  本文已影响0人  LouisXWB

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 是否生效依赖开发工具和使用的框架:

在生产环境代码中,断言会被忽略,与此同时传入 assert 的参数不被判断。

上一篇下一篇

猜你喜欢

热点阅读