控制流程语句

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

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

Dart基础-控制流程与异常处理相关推荐

  1. Dart入门—控制流程与其他

    Dart入门-控制流程与其他 控制流程 if~else if语句和可选的else语句,简单的if语句可以用条件运算符( ? : )来处理 if (isRaining()) {you.bringRain ...

  2. Java基础-控制流程-5. 中断控制流程语句

    为什么80%的码农都做不了架构师?>>>    Java设计者在语言中增加了一条带标签的break,以此来支持这种程序设计风格. 下面先来看看不带标签的break语句.与用于退出sw ...

  3. java 基本语法与流程控制_Java基础语法之控制流程

    Java基础语法之控制流程 语言的流程控制提供了对程序步骤的基本方法. 三大流程控制语句:顺序.选择.循环 复合结构 复合结构是以一个区块为单位的,由"{"开始"}&qu ...

  4. 【Vue】v-if 、v-show、v-for指令,最基础的流程控制和循环处理

    本文我们来学习一下v-if,v-show和v-for指令,也就是最基础的流程控制和循环处理. v-if 和 v-show v-if 和 v-show 的作用有点类似,都是进行条件判断,我们一起来看一下 ...

  5. go语言打印日期_go语言基础:流程控制(4)-多重循环跳转控制

    1.6 多重循环控制 1.6.1 概念解析 1)多重循环就是指将一个循环嵌套在另一个循环体内,就形成了嵌套循环.在外边的for循环称之为外层for循环,在里面的for循环称之为内层for循环.2)实质 ...

  6. python if else格式_【Python基础】流程控制-if..else

    [Python基础]流程控制-if..else ''' 基本的使用 if 条件: 满足条件执行的代码 else: 不满足条件执行的代码 ''' # age = input("Please i ...

  7. Java基础重温_02:运算符、三元运算符案例(2只老虎、3个和尚)、键盘录入(Scanner类)、控制流程语句、控制流程语句案例(奇偶数、考试奖励)

    摘要 Java基础重温_02: 运算符(算术运算.+操作.赋值运算.自增自减.关系运算(比较).逻辑运算.短路逻辑运算.三元运算) 三元运算符案例(2只老虎:2个变量比较.三个和尚:3个变量比较) 键 ...

  8. Python基础概念_4_控制流程

    控制流程 5 控制流程 5.1 简介 到目前为止我们所见到的程序,总是有一系列的语句,Python会很忠实地按照它们的顺序执行.如果你想要改变语句的执行顺序,该怎么办呢?比如:根据时间打印" ...

  9. 【Java基础】(六-上)java控制流程——顺序结构和分支结构

    控制流程写一篇太长,就像之前第三篇一样,我回过头都不想看,所以分成了两篇,小巧精致,挺好. java控制流程 1. 控制流程是个什么东西? 2. 控制流程的分类 (1)顺序结构 (2)分支结构 一.i ...

最新文章

  1. java时间转换为字符串格式错误_字符串转换为日期时间格式及其错误处理(转)
  2. 高手的习惯:pythonic风格代码
  3. SharePoint 2007图文开发教程(6)---实现Search Services
  4. XBodhi(技术框架)——序
  5. 1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
  6. KDE Web开辟工具──KDE-Webdev
  7. linux内核杂记(3)-进程(2)
  8. python 安装包时出现红字_Python从入门到就业-1.1节:安装Python
  9. maven 安装m2e 报错
  10. 浅谈数据结构和数据类型
  11. 全新的Windows Phone 8开发资源汇总
  12. 程序员应该具备的12种能力
  13. 撸了个搜索引擎系统,爽!
  14. ps怎么抠地图线路_这些图片用PS怎么抠?ps抠图入门及PS抠图常用的7种方法(附详细步骤)...
  15. SpringBoot的Upd服务端,客户端案列
  16. Mac M1系统安装pytorch
  17. 使用高德开放平台显示指定的坐标点和线
  18. 二阶魔方还原 C++ BFS
  19. 什么是强化学习?(贝尔曼方程)
  20. 阿里p8整理的这套K8S手册,我看谁还没有看过

热门文章

  1. Chaarshanbegaan at Cafebazaar 水题
  2. 畅通工程再续 最小生成树
  3. AcWing1089.烽火传递(单调队列DP)
  4. Matlab修改显示数值格式/精度/小数位数
  5. 【CVPR 2021】VarifocalNet: An IoU-aware Dense Object Detector的译读笔记
  6. 《深度学习笔记》——listnumpy索引操作的学习笔记
  7. OpenCV——读取图片的数据类型必须是int8类型吗?
  8. 计算机视觉CV中特征点提取SURF算法的学习笔记
  9. flask中的static_path和static_path_url和static_folder
  10. Python中的进程和线程