【Dart】Dart学习(五)流程控制语句

这篇具有很好参考价值的文章主要介绍了【Dart】Dart学习(五)流程控制语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

流程控制语句

你可以使用下面的语句来控制 Dart 代码的执行流程:

  • ifelse

  • for 循环

  • whiledo-while 循环

  • breakcontinue

  • switchcase

  • assert

使用 try-catchthrow 也能影响控制流

If 和 Else

Dart 支持 if - else 语句,其中 else 是可选的,比如下面的例子。

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

Dart 的 if 语句中的条件必须是布尔值而不能为其它类型。

For 循环

你可以使用标准的 for 循环进行迭代。例如:

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

在 Dart 语言中,for 循环中的闭包会自动捕获循环的 索引值 以避免 JavaScript 中一些常见的陷阱。假设有如下代码:

var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}

for (final c in callbacks) {
  c();
}

上述代码执行后会输出 01,但是如果在 JavaScript 中执行同样的代码则会输出两个 2

如果要遍历的对象是一个可迭代对象(例如 List 或 Set),并且你不需要知道当前的遍历索引,则可以使用 for-in 方法进行遍历

for (final candidate in candidates) {
  candidate.interview();
}

可迭代对象同时可以使用 forEach()方法作为另一种选择:

var collection = [1, 2, 3];
collection.forEach(print); // 1 2 3

While 和 Do-While

while 循环会在执行循环体前先判断条件:

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

do-while 循环则会 先执行一遍循环体 再判断条件:

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

Break 和 Continue

使用 break 可以中断循环:

while (true) {
  if (shutDownRequested()) break;
  processIncomingRequests();
}

使用 continue 可以跳过本次循环直接进入下一次循环:

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

如果你正在使用诸如 List 或 Set 之类的 Iterable 对象,你可以用以下方式重写上述例子:

candidates
    .where((c) => c.yearsExperience >= 5)
    .forEach((c) => c.interview());

Switch 和 Case

Switch 语句在 Dart 中使用 == 来比较整数、字符串或编译时常量,比较的两个对象必须是同一个类型且不能是子类并且没有重写 == 操作符。 枚举类型非常适合在 Switch 语句中使用。

备注:

Dart 中的 Switch 语句仅适用于有限的情况,比如使用解释器和扫描器的场景。

每一个非空的 case 子句都必须有一个 break 语句,也可以通过 continuethrow 或者 return 来结束非空 case 语句。

不匹配任何 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();
    // ERROR: Missing break

case ‘CLOSED’:
executeClosed();
break;
}

但是,Dart 支持空的 case 语句,允许其以 fall-through 的形式执行。

var command = 'CLOSED';
switch (command) {
  case 'CLOSED': // Empty case falls through.
  case 'NOW_CLOSED':
    // Runs for both CLOSED and NOW_CLOSED.
    executeNowClosed();
    break;
}

在非空 case 语句中想要实现 fall-through 的形式,可以使用 continue 语句配合 label 的方式实现:

var command = 'CLOSED';
switch (command) {
  case 'CLOSED':
    executeClosed();
    continue nowClosed;
  // Continues executing at the nowClosed label.

nowClosed:
case ‘NOW_CLOSED’:
// Runs for both CLOSED and NOW_CLOSED.
executeNowClosed();
break;
}

每个 case 子句都可以有局部变量且仅在该 case 语句内可见。

断言

在开发过程中,可以在条件表达式为 false 时使用 — assert(条件, 可选信息); — 语句来打断代码的执行。你可以在本文中找到大量使用 assert 的例子。下面是相关示例:

// Make sure the variable has a non-null value.
assert(text != null);

// Make sure the value is less than 100.
assert(number < 100);

// Make sure this is an https URL.
assert(urlString.startsWith(‘https’));

assert 的第二个参数可以为其添加一个字符串消息。

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

assert 的第一个参数可以是值为布尔值的任何表达式。如果表达式的值为 true,则断言成功,继续执行。如果表达式的值为 false,则断言失败,抛出一个AssertionError 异常。

如何判断断言是否生效?断言是否生效依赖开发工具和使用的框架:

  • Flutter 在 调试模式 时生效。

  • 一些开发工具比如 [webdev serve][] 通常情况下是默认生效的。

  • 其他一些工具,比如 dart run 以及 [dart compile js][] 通过在运行 Dart 程序时添加命令行参数 --enable-asserts 使 assert 生效。

在生产环境代码中,断言会被忽略,与此同时传入 assert 的参数不被判断。文章来源地址https://www.toymoban.com/news/detail-494041.html

到了这里,关于【Dart】Dart学习(五)流程控制语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL-流程控制语句

    Ⅰ、分支结构-If ​ ①不同的表达式对应不同的操作 ​ ② 使用在begin end中 ​ ③语法定义: Ⅱ、分支结构-case ​ ①类似与 Java 中 if···esle if···else·· ​ ②类似于 Java 中 switch 语句 ​ ③语法: Ⅰ、循环结构-loop ​ ①用来重复执行某些语句,直到循环退出(使用 leave 子句

    2024年04月14日
    浏览(25)
  • c#笔记-流程控制语句

    为了展示流程控制的作用,需要每次执行程序时都使用不一样的值。 无论是每次都修改源码,还是从控制台读取输入都太麻烦了。 所以使用随机数进行测试。 随机数的使用方式如下,使用随机数类,获取一个默认的随机数工具,然后用这个工具生成随机数。 1 变量储存值而

    2024年02月05日
    浏览(33)
  • 【JAVA-模块四 流程控制语句】

    流程控制语句: 控制程序执行的顺序的语句 分类:顺序结构(按照代码的先后顺序依次执行), ​ 分支结构:if,switch ​ 循环结构:for,while,do while if第一种格式: 成立就执行,不成立就不执行 if第二种格式 双分支: if的第三种格式:多条件分支 最后一个else算是配体条件(

    2023年04月16日
    浏览(20)
  • Java 流程控制 Switch 语句

    一、什么是Switch语句? Switch语句是Java中的一种流程控制语句,用于根据表达式的值选择不同的执行路径。Switch语句通常用于多个条件的判断,比如根据用户输入的不同选项执行不同的操作。 二、语法说明 Switch语句的基本语法如下: Switch语句包含一个表达式和多个case语句块

    2024年02月09日
    浏览(40)
  • Python流程控制语句-条件判断语句练习及应用详解

    Python代码在执行时是按照自上向下顺序执行的。通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次。流程控制语句分成两大类:条件判断语句,循环语句。本节我们先来将条件判断语句。 if语句是Python中非常重要的流程控制语句之一,其基本语

    2024年02月09日
    浏览(39)
  • 精通Python(基础篇)——流程控制语句

    计算机在执行代码时有三种组织结构: 顺序结构: 程序从上到下依次执行。 选择结构: 按照条件选择执行不同的代码块。 循环结构: 重复执行某段代码块。 一个程序如果按部就班从头到尾,中间没有转折,其实无法完成太多工作。程序设计经常需要转折,这个转折在程序设计

    2023年04月17日
    浏览(27)
  • Go语言中的流程控制语句

    目录 流程控制语句 if语句 if···else语句 switch语句 for循环 break语句 continue语句 goto语句 在Go语言中,可以在if后面加上一段执行语句,执行语句也可以用作对if条件的判断。它的语法格式为: a赋值为condition()方法的结果,然后让a与nil进行判断,如果为true,那么会执行代码块中

    2024年02月03日
    浏览(31)
  • 【linux 脚本篇】流程控制语句-case

    目录 🍁案例一:菜单选项 🍂if语句执行 🍂case语句执行 🍁案例二:rsync服务脚本 🍂if语句执行 🍂case语句执行 🍁案例三:nginx服务脚本 🍁案例四:实现系统工具箱 🍁案例五:实现简单的jumpserver跳板机     🦐博客主页:大虾好吃吗的博客     🦐专栏地址:Linux从入门

    2024年02月07日
    浏览(37)
  • 【Linux脚本篇】流程控制语句-if

    目录 🍁流程控制语句if 🍂单分支语句 🍂双分支语句 🍂多分支语句 🍁流程控制语句:文件比较 🍁流程控制语句:整数比对 🍁流程控制语句:字符对比 🍁正则表达式 🍁流程控制语句:正则比对,使用[[]]    🦐博客主页:大虾好吃吗的博客    🦐专栏地址:Linux从入

    2024年02月06日
    浏览(39)
  • Linux:Linux操作系统流程控制语句-case语句使用介绍

    本博客将介绍Linux操作系统中流程控制语句-case语句的使用方法。我们将通过多个案例来详细说明case语句的执行流程和用法。这些案例包括菜单选项、rsync服务脚本、nginx服务脚本、实现系统工具箱和实现简单的jumpserver跳板机。通过学习这些内容,您将能够更好地掌握Shell脚本

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包