Dart 入门(2)控制流程语句

7 篇文章 0 订阅
6 篇文章 0 订阅

流程控制语句

  1. if and else
  2. switch case
  3. ?:、??(三元运算符)
  4. for
  5. while loop and do while
  6. continue and break and return

if and else

 String fullName = "音乐小钢炮";

  bool isEmpty = fullName.isEmpty;// 判断是否名字是否为空

  if (isEmpty) {// 如果名字为空 
    print("$fullName 为空");
  } else {// 如果名字不为空
    var len = fullName.length;// 获取名字长度
    if (len <= 4) {// 名字长度小于等于4
      print("$fullName 这个名字长度还可以");
    } else if (len >= 5 && len <= 10) {// 名字长度在5(包含)到10之间(包含)
      print("$fullName 这个名字真TM长");
    }else{// 其他情况,名字长度大于10(不包含)的情况
      print("$fullName 这个名字也太TM长");
    }
  }

Switch Case

我们将上面的 if else 判断修改成 Switch Case 试试

 String fullName = "音乐小钢炮";
 bool isEmpty = fullName.isEmpty; // 判断是否名字是否为空
   switch (isEmpty) {
    case true:
      print("$fullName 为空");
      break;
    default:
      var len = fullName.length; // 获取名字长度
      switch (len) {
        case 0:
        	print("$fullName 为空");
        break;
        case 1:
       	...
        case 4:
          print("$fullName 这个名字长度还可以");
          break;
        case 5:
       	...
        case 10:
          print("$fullName 这个名字真TM长");
          break;
        default:
          // 其他情况,名字长度大于10(不包含)的情况
          print("$fullName 这个名字也太TM长");
      }
  }

明显不严谨哈,但是也能表达出 Switch case 的用法,一个 case 对应一个 break,那就是满足这个条件才能执行 case 和 break 中间的语句,多个case 对应一个 break,那就是只要满足这些个条件中的一个就能执行 case 和 break 中间的语句。default 表示所有 case 的条件都没有满足,那么执行 default 下面的语句。

?:、??(三元运算符)

?: 意思是 ? 前面的条件是否为 true,如果为 true,执行 : 左边代码,否则执行右边代码

?? 意思是 ?? 前面的判断条件是否为 null ,如果为空,那么执行 ?? 后面代码,否则执行 ?? 后面的代码

  String fullName = "音乐小钢炮";
  fullName.length <= 4 ? print("$fullName 是个好名字") : print("$fullName 这个名字真长");

  var name = fullName ?? "填写个默认名字";
  print(name); // 打印 音乐小钢炮

  fullName = "";
  var name2 = fullName ?? "填写个默认名字";
  print(name2); // 打印 ""

  fullName = null;
  var name3 = fullName ?? "填写个默认名字";
  print(name3); // 打印 "填写个默认名字"

for

进行迭代操作,可以使用标准 for 语句

  var animals = ["Dog", "Cat", "Bird"];
  // 第一种
  for (var i = 0; i < animals.length; i++) {// 三个语句,i 从 0 开始,i 小于 animals 的长度,i++;
    print(animals[i]);
  }
  // 第二种
  for (var item in animals) {// 在 animals 中进行遍历,得到 item 对象
    print(item);
  }
  // 第三种 
  animals.forEach((element) {// 调用 animals 的 forEach 方法
    print(element);
  });

While

  int cont = 0;
  while(cont <= 10){// 这里是循环条件 只要 cont 小于等于10,就会继续循环
    print(cont);
    cont++;
  }

do while

  do { // 满足循环条件执行的代码块
    print(cont);
    cont++;
  } while (cont <= 10);// 循环条件

这里 while 和 do while 有点区别,while 是先执行循环判断条件,判断是否成立,然后再执行满足循环后的代码块。而do while 是先执行一次 do 里面的代码块,然后再执行循环判断条件,判断是否满足继续执行 do 里面的代码块。类似下面代码:

  int cont = -1;
  // 会先打印一次 cont 的值
  do {
    cont++;
    print(cont);
  } while (cont > 0);
  int cont = -1;
  while(cont > 0){// 这里先执行判断条件,不满足,所以没有打印
    cont++;
    print(cont);
  }

continue、break、return

continue:终止本次循环,继续到下一个循环。
break:终止循环。
return:不仅终止循环,同时还要终止函数。

void main() {
  var conts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  for (var cont in conts) {
    if (cont == 2) {
      continue;
    } else if (cont == 8) {
      break;
    }
    print(cont);
  }
  print("结束");// 循环外的代码块
}

上面代码打印出来的数据为 :

1
3
4
5
6
7
结束

可以看出,当 cont == 2 的时候执行 continue 终止了本次循环,没有把 2 打印出来,开始进行下次循环了,此时 cont++ 后等于 3 了,所以接着 3 开始打印,又当 cont ==8 的时候,执行了 break,终止了本次循环,开始执行循环外的代码块了。
现在我们修改一下 break 为 return;

void main() {
  var conts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  for (var cont in conts) {
    if (cont == 2) {
      continue;
    } else if (cont == 8) {
      return;
    }
    print(cont);
  }
  print("object");
}

上面代码打印为:

1
3
4
5
6
7

可以看出 break 换成 return 后,循环不仅被终止了,循环外的代码块也没有继续执行,所以说 return 是将整个函数终止了。

注意:当有多层嵌套循环的时候看看下面代码的输出情况:

void main() {
  var conts = [1, 2, 3];
  var strs = ["A", "B", "C"];
  for (var cont in conts) {
    for (var str in strs) {
      if(str == "B"){
        continue;
      }
      print("$cont : $str");
    }
  }
  print("结束");
}

该段代码输出为:

1 : A
1 : C
2 : A
2 : C
3 : A
3 : C

结束

该段代码中,当内层循环 str == “B” 的时候执行了 continue,从输出能看出,continue 终止了内层循环,继续内层循环,所以 “C” 也能打印出来。
下面继续将 continue 修改成 break 继续看输出结果

void main() {
  var conts = [1, 2, 3];
  var strs = ["A", "B", "C"];
  for (var cont in conts) {
    for (var str in strs) {
      if(str == "B"){
        break;
      }
      print("$cont : $str");
    }
  }
  print("结束");
}

输出为:

1 : A
2 : A
3 : A

结束

可以看出当内层循环执行了 break 后,终止的循环也只是内层循环,外层的循环是执行完毕了。
现在继续将 break 修改为 return 再看看输出结果:

void main() {
  var conts = [1, 2, 3];
  var strs = ["A", "B", "C"];
  for (var cont in conts) {
    for (var str in strs) {
      if(str == "B"){
        return;
      }
      print("$cont : $str");
    }
  }
  print("结束");
}

输出结果为:

1 : A

可以看出当执行到 return 的时候,不仅内层循环被打断,外层循环同样被打断,而且循环外的代码块也没有执行。所以我们可以得出结论:continue、break 的作用于只能针对本层循环内,无法影响到外层循环,而 return 作用于是在整个函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值