Dart基础-控制流程与异常处理

简介: <div class="markdown_views"><h2 id="控制流程语句">控制流程语句</h2><p>你可以通过以下方法控制代码流程</p><ul><li>if和else</li><li>for循环</li><li>while和do-while循环</li><li>break和continue</li><li>switch和case</li>

控制流程语句

你可以通过以下方法控制代码流程

  • if和else
  • for循环
  • while和do-while循环
  • break和continue
  • switch和case
  • assert

你也可以使用try-catch和throw处理异常

if和else

dart支持if语句和可选的else语句,简单的if语句可以用条件运算符( ? : ),下面是例子

if (isRaining()) {
  you.bringRainCoat();
} else if (isSnowing()) {
  you.wearJacket();
} else {
  car.putTopDown();
}

for循环

你可以使用for循环进行迭代

var message = new StringBuffer("Dart is fun");
for (var i = 0; i < 5; i++) {
  message.write('!');
}

如果对象是一个iteration对象,你可以使用forEach()方法

candidates.forEach((candidate) => candidate.interview());

iteration类List和Set使用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;
  processIncomingRequest();
}

使用continue跳过本次循环

for (int i = 0;i < candidates.length;i++) {
  var candidate = candidates[i];
  if (candidate.yearsExperince < 5) {
    continue;
  }
  candidate.interview();
}

switch和case

switch通常用于整数、字符串和编译时常量的比较,比较的对象必须是同一类的实例,而不是任何子类型,每一个case必须用break结束。

在没有case匹配的情况下执行default的内容

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();
  }

下面例子中的case省略了break,因此产生了一个错误

var command = 'OPEN';
switch (command) {
  case 'OPEN':
    executeOpen();
    //错误:缺少break导致异常!

  case 'CLOSED':
    executeClosed();
    break;
}

然而,在case内容为空的情况下支持落空

var command = 'CLOSED';
switch (command) {
  case 'CLOSED':
  case 'NOW_CLOSED':
    executeNowClosed();
    break;
}

如果你真的希望落空,你可以使用continue继续执行

var command = 'CLOSED';
switch (command) {
  case 'CLOSED':
    executeClosed();
    continue nowClosed;

nowClosed:
  case 'NOW_CLOSED':
    executeNowClosed();
    break;
}

assert

使用assert语句,如果布尔值为false就扰乱正常运行,只在检查模式下工作

//确保变量非空
assert(text != null);

//确保值小于100
assert(number < 100);

//确保这是一个https URL
assert(urlString.startsWith('https'));

异常处理

dart会抛出并捕获异常,异常表示一些意想不到的事情发生了,如果没有捕获异常,就会中断运行或程序结束,与java不同,dart的所有异常都是未经检查的,dart提供了Exception和Error类型,以及众多预定义的子类型,你也可以自己定义异常

throw

这是个抛出异常的例子

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

你还可以抛出任意对象

throw 'Out of llamas!';

因为抛出异常是一个表达式,你可以用 => statements 在任何地方抛出异常

distanceTo(Point other) => throw new UnimplementedError();

catch

捕捉或捕获异常阻止异常继续运行,捕获异常并处理

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

代码可以有多个类型的异常处理,你可以指定多个异常处理,第一个catch子句处理异常对象的类型,如果catch子句没有指定异常类型,就处理所有异常类型

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  //指定的异常
  buyMoreLlamas();
} on Exception catch (e) {
  //所有异常
  print('Unknown exception: $e');
} catch (e) {
  //没有指定类型,处理所有异常
  print('Something really unknown: $e');
}

看上面的代码,你可以使用on和catch或两者都用,使用on指定异常类型,使用catch给异常处理程序一个异常对象

finally

确保代码的运行,不管是否抛出异常,使用finally子句,无论是否有匹配异常的catch子句,最终都执行finally子句

try {
  breedMoreLlamas();
} finally {
  //总是执行,即使抛出异常
  cleanLiamaStalls();
}

匹配任何异常catch子句后运行finally子句

try {
  breedMoreLlamas();
} catch(e) {
  //首先处理异常
  print('Error: $e');
} finally {
  //然后执行
  cleanLiamaStalls();
}
目录
相关文章
|
2月前
|
Go 开发者
Go语言中的错误处理与异常机制:实践与最佳策略
【2月更文挑战第7天】Go语言以其独特的错误处理机制而闻名,它鼓励显式错误检查而不是依赖于异常。本文将探讨错误处理与异常机制在Go语言中的实际应用,并分享一些最佳实践,帮助开发者编写更加健壮和易于维护的Go代码。
|
3月前
|
前端开发 JavaScript 安全
Promise/A+ 规范详解:打造健壮异步代码的必备知识(上)
Promise/A+ 规范详解:打造健壮异步代码的必备知识(上)
Promise/A+ 规范详解:打造健壮异步代码的必备知识(上)
|
1月前
|
Rust 测试技术
【Rust】——控制流(if-else,循环)
【Rust】——控制流(if-else,循环)
32 0
|
3月前
|
前端开发 安全
Promise/A+ 规范详解:打造健壮异步代码的必备知识(下)
Promise/A+ 规范详解:打造健壮异步代码的必备知识(下)
Promise/A+ 规范详解:打造健壮异步代码的必备知识(下)
|
4月前
|
编译器 Go 索引
go语言控制流
go语言控制流
25 0
|
5月前
|
Java UED
异常处理:让你的代码更加健壮
异常处理:让你的代码更加健壮
如何用c++实现异常处理
如何用c++实现异常处理
如何用c++实现异常处理
|
Dart Java Kotlin
|
Dart 算法 索引
[Flutter]足够入门的Dart语言系列之流程控制语句:条件和循环(if、switch、for、while)
流程控制相关的语句主要分为:条件语句、循环语句、循环中的中断语句、以及异常处理语句。流程控制用于根据需要组合不同的语句、执行不同的处理,完成正确的流程逻辑。由此可以更好、更正确的完成程序功能...
424 0
[Flutter]足够入门的Dart语言系列之流程控制语句:条件和循环(if、switch、for、while)
|
开发者 Python
Python语法之异常处理
前面我们已经介绍了模块的创建和包的应用,在这一小节,我们将继续来学习Python的异常处理方法,了解常见异常的处理方法以及异常的基本概念。
59 0

热门文章

最新文章