美文网首页Dart
Dart - 流程控制语句

Dart - 流程控制语句

作者: LouisXWB | 来源:发表于2019-12-18 13:06 被阅读0次

    Dart的控制流程语句跟其他编程语言类似,这里就不一一记录了,只记录需要注意的特殊点。

    if

    Dart 的 if 语句中的条件必须是一个布尔值,不能是其它类型。详情请查阅布尔值

    for

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

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

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

    如果要遍历的对象实现了 Iterable 接口,则可以使用 forEach() 方法,如果不需要使用到索引,则使用 forEach 方法是一个非常好的选择:

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

    Iterable

    如果像 List 或 Set 一样实现了 Iterable 接口则可以简单地使用下述写法:

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

    断言

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

    // 确保变量值不为 null (Make sure the variable has a non-null value)
    assert(text != null);
    
    // 确保变量值小于 100。
    assert(number < 100);
    
    // 确保这是一个 https 地址。
    assert(urlString.startsWith('https'));
    

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

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

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

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

    • Flutter 在调试模式时生效。

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

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

    在生产环境代码中,断言会被忽略,与此同时传入 assert 的参数不被判断。

    相关文章

      网友评论

        本文标题:Dart - 流程控制语句

        本文链接:https://www.haomeiwen.com/subject/mfxunctx.html