if-else
条件必须是布尔型的值。
if (isRaining()) {
you.bringRainCoat();
} else if (isSnowing()) {
you.wearJacket();
} else {
car.putTopDown();
}
for循环
var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
message.write('!');
}
dart for循环中的闭包可以捕获循环的 index 索引值, 来避免 JavaScript 中常见的问题。
var callbacks = [];
for (var i = 0; i < 2; i++) {
callbacks.add(() => print(i));
}
callbacks.forEach((c) => c());
输出的结果为所期望的 0 和 1。但是 上面同样的代码在 JavaScript 中会打印两个 2。
for 循环遍历
//对象实现了 Iterable 接口
candidates.forEach((candidate) => candidate.interview());
//for in 遍历
var collection = [0, 1, 2];
for (var x in collection) {
print(x);
}
while 和 do-while
while 循环在执行循环之前先判断条件是否满足:
while (!isDone()) {
doSomething();
}
而 do-while 循环是先执行循环代码再判断条件:
do {
printLine();
} while (!atEndOfPage());
break 和 continue
使用 break 来终止循环:
while (true) {
if (shutDownRequested()) break;
processIncomingRequests();
}
使用 continue 来开始下一次循环:
for (int i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.yearsExperience < 5) {
continue;
}
candidate.interview();
}
上面的代码在实现 Iterable 接口对象上可以使用下面的写法:
candidates.where((c) => c.yearsExperience >= 5)
.forEach((c) => c.interview());
Switch and case
- Dart 中的 Switch 语句使用 == 比较 integer、string、或者编译时常量。
- 比较的对象必须都是同一个类的实例(并且不是其子类),class 不能覆写 == 操作符。
- Enumerated types 非常适合 在 switch 语句中使用。
- 每个非空的 case 语句都必须有一个 break 语句。
- 空 case 语句中可以不要 break 语句。
- 可以通过 continue、 throw 或 者 return 来结束非空 case 语句。
- 如果需要实现继续到下一个 case 语句中继续执行,则可以使用 continue 语句跳转到对应的标签(label)处继续执行:
- 当没有 case 语句匹配的时候,可以使用 default 语句来匹配这种默认情况。
- 每个 case 语句可以有局部变量,局部变量 只有在这个语句内可见。
var command = 'CLOSED';
switch (command) {
case 'CLOSED':
executeClosed();
continue nowClosed;
// Continues executing at the nowClosed label.
nowClosed:
case 'NOW_CLOSED':
// Runs for both CLOSED and NOW_CLOSED.
executeNowClosed();
break;
}
Assert(断言)
- 如果条件表达式结果不满足需要,则可以使用 assert 语句俩打断代码的执行
- 断言只在检查模式下运行有效,如果在生产模式 运行,则断言不会执行。
- 断言执行失败,会抛出一个异常 AssertionError
// Make sure the variable has a non-null value.
assert(text != null);
// Make sure the value is less than 100.
assert(number < 100);
// Make sure this is an https URL.
assert(urlString.startsWith('https'));
//为 Assert 绑定一个消息
assert(urlString.startsWith('https'),
'URL ($urlString) should start with "https".');