美文网首页
ControlFlowStatements(流程控制语句) of

ControlFlowStatements(流程控制语句) of

作者: Kidnight | 来源:发表于2019-10-08 20:49 被阅读0次
    void main(List<String> args) {
    
     /**
     * Control flow statements (流程控制语句)
     * 可以使用下面的语句来控制Dart代码的流程:
     *      if and else
     *      for loops
     *      while and dow-while loops
     *      break and continue
     *      switch and case
     *      assert
     * 使用 try-catch 和 throw 还能影响控制流程的 跳转。
     */
     
    /**
     * ============================================================================
     */
    
    /**
     * if and else
     * Dart支持 if 语句以及可选的 else,例如下面的实例。
     *      if (isRaining){
     *        you.bringRainCoat();
     *      } else if (isSnowing){
     *        you.wearJacket();
     *      } else {
     *        car.putTopDown();
     *      }
     */
    
    /**
     * ============================================================================
     */
    
    /**
     * For loops
     * 可以使用标准的 for 循环
     */
    var message = new StringBuffer('Dart is fun');
    for (var i = 0; i < 5; i++) {
      message.write('!');
    }
    /**
     * Dart for 循环中的闭包会捕获循环的 index 索引值,来避免 JavaScript 中常见的问题。例如:
     */
    var callbacks = [];
    for (var i = 0; i < 2; i++) {
      callbacks.add(() => print(i));
    }
    callbacks.forEach((c) => c());  // c 是callbacks里的元素,是个函数,主要功能是打印索引
    /**
     * 如果要遍历的对象实现了 Iterable 接口, 则可以使用 forEach() 方法。如果不需要当前的索引,则使用
     * forEach() 方法是个非常好的选择:
     *      candidates.forEach((candidate) => candidate.interview());
     */
    /**
     * List 和 Set 等实现了 Iterable 接口的类还支持 for-in 形式的遍历:
     */
    var collection = [0,1,2];
    for (var x in collection) {
      print(x);
    }
    
    /**
     * ============================================================================
     */
    
    /**
     * Whilte and do-while
     * while 循环在执行循环之前先判断条件是否满足
     * 
     *      while (!isDone){
     *        doSomething();
     *      }
     */
    
    /**
     * 而 do-while 循环是先执行循环代码再判断条件
     * 
     *      do {
     *        printLine();
     *      } while (!atEndOfPage());
     */
    
    /**
     * ============================================================================
     */
    
    /**
     * Break and 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();
     *      }
     * 
     * 上面的代码在实现 Iterable 接口对象上 可以使用下面的写法:
     * 
     *      candidates.where((c) => c.yearsExperience >= 5).forEach((c) => c.interview());
     */
    
    /**
     * ============================================================================
     */
    
    /**
     * Switch and case
     * 
     * Dart 中的 Switch 语句使用 == 比较 integer、string、或者编译时常量。比较的对象必须都是同一个类的实例,
     * class 必须没有覆写 == 操作符。Enumerated types 非常适合在 switch 语句中使用。
     * 注意:Dart 中的 Switch语句仅适用于有限的情况,例如在解释器或者扫描器中使用。
     * 
     * 每个非空的 case 语句都必须有一个 break 语句。另外还可以通过 continue、throw、或者return来结束非空 case语句。
     * 当没有 case语句匹配的时候,可以使用 defaut 语句来匹配这种默认情况。
     * 
     *      var command = 'OPEN';
     *      switch (command) {
     *        case 'CLOSED':
     *          executeClosed();
     *          break;
     *        case 'PENDING':
     *          executePending();
     *          break;
     *        defaut:
     *          executeUnknown();
     *      }
     *      
     * 下面的实例代码在 case 中省略了break 语句,编译的时候将会出现一个错误:
     *      var command = 'CLOSED';
     *      switch (command) {
     *        case 'CLOSED':
     *          executeClosed();  // ERROR:Missing break causes an exception!!
     *        case 'PENDING':
     *          executePending();
     *          break;
     *        defaut:
     *          executeUnknown();
     *      }
     * 
     * 但是,在Dart中的空case语句中可以不要 break 语句:
     *      var command = 'CLOSED';
     *      switch (command) {
     *        case 'CLOSED':  // Empty case falls through.
     *        case 'PENDING':
     *          // runs for both CLOSED and PENDING
     *          executePending();
     *          break;
     *        defaut:
     *          executeUnknown();
     *      }
     * 
     * 如果你需要实现这种继续到下一个 case 语句中继续执行,则可以使用 continue 语句跳转到对应的标签(label)处继续执行:
     * 
     *      var command = 'OPEN';
     *      switch (command) {
     *        case 'CLOSED':
     *          executeClosed();
     *          continue nowClosed; // Continues executing at the nowClosed label.
     *      nowClosed:
     *        case 'PENDING':
     *          executePending();
     *          break;
     *        defaut:
     *          executeUnknown();
     *      }
     * 
     * 每个 case 语句可以有局部变量,局部变量只有在这个语句内可见。
     */
    
    /**
     * ============================================================================
     */
    
    /**
     * Assert (断言)
     * 如果条件表达式结果不满足需要,则可以使用 assert 语句来打断代码的执行。下面是实例代码:
     *      assert(text != null);
     *      assert(number < 100);
     *      assert(urlString.startsWith('https));
     * 注意:断言只在检查模式下运行有效,如果在生产模式运行,则断言不会执行。
     * 
     * assert 方法的参数 可以为任何返回布尔值的表达式或者方法。
     * 如果返回的值为true,则断言通过,执行结束,
     * 如果返回的值为false,断言执行失败,会抛出一个异常。
     */
    
    
    }
    

    相关文章

      网友评论

          本文标题:ControlFlowStatements(流程控制语句) of

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