Dart 学习笔记-控制流程语句及异常

参考: https://www.dartcn.com/guides/language/language-tour#callable-classes

控制流程语句

Dart 语言中的控制流程语句主要有以下几个:

  • if-else
  • for
  • while
  • break-continue
  • switch
  • assert

if-else

Dart 支持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('!');
}
print(message);

输出:
Dart is fun!!!!!

实现了 Iterable 的类(比如, List 和 Set)同样也支持使用 for-in 进行迭代操作 iteration :

var collection = [0, 1, 2];
for (var x in collection) {
  print(x); // 0 1 2
}

输出:
0
1
2

while 和 do-while

while 循环在执行前判断执行条件,条件通过则执行代码块中的代码,否则跳过。

while (!isDone()) {
  doSomething();
}

do-while 循环在执行后判断执行条件,会执行一次代码块中的内容,如果 while()中条件不符合则下次执行不在进入循环体。

do {
  printLine();
} while (!atEndOfPage());

break 和 continue

使用 break 停止程序循环
使用 continue 跳转到下一次迭代

switch 和 case

Dartswitch 语句使用 == 比较整数,字符串,或者编译时常量。
case 语句中,每个非空的 case 语句结尾需要跟一个 break 语句。 除 break 以外,还有可以使用 continue, throw,者 return

下面的 case 程序示例中缺省了break 语句,导致错误:

void main() {
	var command = 'OPEN';
	switch (command) {
	  case 'OPEN':
	    print("open");
	    // ERROR: 丢失 break
	    // break;
	
	  case 'CLOSED':
	    print("closed");
	    break;
	}
}

下面的 case 程序示例中展示了 除 break 以外,还有可以使用 continue, throw,者 return。:

void main() {
  var command = 'OPEN';
  switch (command) {
    case 'OPEN':
      print("open");
      // ERROR: 丢失 break
      // break;
      continue nowClosed;
    case 'FAIL':
      print("fail");
      break;
    nowClosed:
    case 'CLOSED':
      print("closed");
      break;
  }
}


输出:
open
closed

assert

提示: assert 语句只在开发环境中有效, 在生产环境是无效的;

如果 assert 语句中的布尔条件为 false , 那么正常的程序执行流程会被中断。

// 确认变量值不为空。
assert(text != null);

// 确认变量值小于100。
assert(number < 100);

// 确认 URL 是否是 https 类型。
assert(urlString.startsWith('https'));

异常

Dart 代码可以抛出和捕获异常。 异常表示一些未知的错误情况。 如果异常没有被捕获, 则异常会抛出, 导致抛出异常的代码终止执行。
和 Java 有所不同, Dart 中的所有异常是非检查异常。 方法不会声明它们抛出的异常, 也不要求捕获任何异常。

throw

下面是关于抛出或者 引发 异常的示例:

throw FormatException('Expected at least 1 section');

也可以抛出任意的对象:

throw 'Out of llamas!';

catch

捕获异常可以避免异常继续传递(除非重新抛出( rethrow )异常)。 可以通过捕获异常的机会来处理该异常:

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  buyMoreLlamas();
}

finally

不管是否抛出异常, finally 中的代码都会被执行。 如果 catch 没有匹配到异常, 异常会在 finally 执行完成后,再次被抛出:

try {
  breedMoreLlamas();
} catch (e) {
  print('Error: $e'); // Handle the exception first.
} finally {
  cleanLlamaStalls(); // Then clean up.
}
发布了180 篇原创文章 · 获赞 76 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/ITxiaodong/article/details/104149857