可以使用以下方式来控制Dart代码的流:
Dart支持if语句和可选的else语句,示例如下:
if (isRaining()) { //todo} else if (isSnowing()) { //todo} else { //todo}条件语句必须是返回值为布尔值的表达式,而不是其他表达式。
可以使用标准的for循环进行迭代。例如:
for (var i = 0; i < 5; i++) { print(${i});}Dart for循环中的闭包捕获索引的值,避免了JavaScript中常见的一个陷阱。代码如下:
var callbacks = [];for (var i = 0; i < 2; i++) { callbacks.add(() => print(i));}callbacks.forEach((c) => c());在Dart中如预期一样先输出是0,然后是1;但是该示例在JavaScript中两次打印的都是2。
如果正在迭代的对象是一个Iterable(如List或Set),并且不需要知道当前的迭代计数器,可以直接使用for-in形式的迭代。如下:
for (final item in list) { print(item);}迭代类还有一个forEach()方法:
var collection = [1, 2, 3];collection.forEach(print); // 1 2 3while循环在循环之前计算条件:
//未做完某事情,则一直执行doSomething(),直到达成则跳出循环while (!isDone()) { doSomething();}do...while循环类似于while循环,只是do...while循环不会在第一次循环执行时评估条件。但是它也会针对后续迭代评估条件。也就是说在do...while循环中至少执行代码块一次。
do { Statement(s) to be executed; } while (expression);do...while循环结束时需要使用的分号
break用于停止循环:
var list = [1,2,3,4,5]; for (var item in list) { if(item == 3){ break; } print(${item}); } //输出1 2ccontinue用于跳到下一个循环迭代:
var list = [1,2,3,4,5]; for (var item in list) { if(item == 3){ continue; } print(${item}); } //输出1 2 4 5Dart中的switch语句使用==比较整数、字符串或编译时常量。比较对象必须都是同一个类的实例(而不是它的任何子类型)。枚举类型也可以用于switch。
示例代码如下:
var command = 'OPEN';switch (command) { case 'CLOSED': executeClosed(); break; case 'PENDING': executePending(); break; case 'APPROVED': executeApproved(); break; case 'DENIED': executeDenied(); break; case 'OPEN': executeOpen(); break; default: executeUnknown();}Dart支持空的case子句:
var command = 'CLOSED';switch (command) { case 'CLOSED': case 'NOW_CLOSED': // CLOSED、NOW_CLOSED都是执行以下方法 executeNowClosed(); break;}在开发过程中,使用assert语句——assert(condition, optionalMessage)。如果布尔条件为假,则中断正常执行。
// 确保text是一个非空的值.assert(text != null);// 确保number的值小于100.assert(number < 100);// 确保urlString是以https开头assert(urlString.startsWith('https'));如果要将消息附加到断言,可以添加一个字符串作为assert的第二个参数
assert(urlString.startsWith('https'), 'URL ($urlString) should start with "https".');assert的第一个参数可以是返回值为布尔值的任何表达式,如果表达式的值为true,则断言成功并继续执行;如果为false,断言失败并抛出异常(AssertionError)
断言到底什么时候起作用? 取决于使用的工具和框架:
| 留言与评论(共有 0 条评论) “” |