流程控制语句
- if and else
- switch case
- ?:、??(三元运算符)
- for
- while loop and do while
- 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 作用于是在整个函数。