Dart 语言入门 4: 流程控制

if else

if else 的条件值必须是布林,不能是其他的型态, 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('!');}

forEach

如果不需要用到索引值,且需要叠代出每一个值,forEach是一个很好的方法。

List numbers = [1,2,3,4,5,6,7,8,9,10];numbers.foreach((number)=> print(number));

for in

功能跟forEach 一样,可以叠代出每个值。

List numbers = [1,2,3,4,5,6,7,8,9,10];for(var number in numbers){print(number);}

While

while

再循环之前先判断条件

void main() {    var i = 7;  while (i < 10) {    print(i);  //7,8,9    i++;  }}

do-while

do-while循环是先执行循环内的程式码再去判断条件

void main() {  var i = 0;  do {    i++;    print(i);    //1,2,3  } while (i < 3);}

Break 和 Continue

break: 中断循环

void main() {  var x = 5;  while (true) {    if (x > 7) break;    print(x++);     //5,6,7  }}

continue: 跳过本次循环直接进入下一次循环

void main() {  var x = 5;  while (x < 10) {    x++;    if (x < 7) {      continue;    } else {      print(x);   //7,8,9,10    }  }}

Switch 和 Case

支援空的case,也就是fall-through的形式。非空的case,若要使用fall-through 可以使用 continue 以及 Label 配合使用。非空的case,就一定要有break 不然会发生错误。当完全没有配对成功,则会执行default区段。case 区域内可以设定区域变数,该变数仅能于该case区域使用。
void main() {  var test = 'o';  switch (test) {    case 'w':             // 空case fall-through 形式          case 'x':       print('case2');     //w,x      break;    case 'y':      print('case3');     //y       continue label1;    //非空case,使用continue会直接跳到label1的位置继续执行    case 'z':      print('case4');     //z      break;    label1:               //设定标籤 label1    case 'a':      print('case5');     //a, y      break;         case 'b':      print('case6');     //b      break;    default:      print('case7');    //非以上的字元皆会执行  }}

assert 判定

assert 的第一个参数可以是值为布林值的expr。如果expr的值为 true,则判定成功,继续执行。如果表达式的值为 false,则判定失败,抛出一个 AssertionError 异常,会发生中断,因此可以使用assert来中断正常执行流程。第二个参数可以为其增加一个字串的讯息。
在生成程式(production code)中,assert 不会被执行,只有在测试模式中会被执行。

assert(urlString.startsWith('https'),    'URL ($urlString) should start with "https".');

异常处理(Exceptions)

异常表示发生了意外的错误,若没有捕获,程式将被终止。
常见的异常有 FormatException格式异常、HttpException网络异常、FileSystemException操作文件的异常、IntegerDivisionByZeroException整数除以0的异常。

try

用于包含可能出现异常的程式码。

Throw

用于抛出异常。

Catch

用于捕获异常,可以防止异常继续传递。除非使用了rethrow 会将捕获的异常再次抛出。

on

用于捕获指定的异常型态,如 DeferredLoadException,FormatException,IntegerDivisionByZeroException,IOException,IsolateSpawnException,OSError,TimeoutException...等等,可与 catch同时使用。

finally

要确保程式码能够执行,无论是否有捕获到异常,皆会执行finally的区段程式。
使用方式如下:

void main() {  try {    testThrow();  } on FormatException catch (e) { //指定的Exception    print('Exception :\n $e');  } on Exception catch(e){         //其它的Exception    print('Some other Exception');  } catch (e, s) {                 //未知的Exception    print('Exception details:\n $e');    print('Stack trace:\n $s');  } finally {    print("final");  }}void testThrow() {  throw Exception('myException');}

http://img2.58codes.com/2024/20121852Jg5mPxKAPa.png
除以零的例子如下:

void main() {  var zero = 0;  var x = 5;  try {    var y = x ~/ zero;    print('y = $y');    testThrow();  } on IntegerDivisionByZeroException catch (e) {    print('除以0异常:$e');  } catch (e, s) {    print('Exception details:\n $e');    print('Stack trace:\n $s');  } finally {    print("final");  }}void testThrow() {  throw Exception('myException');}

http://img2.58codes.com/2024/201218524FwlEiR8uy.png


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章