一、条件判断
1. if…
if (逻辑表达式)
{
执行的代码
}
当逻辑表达式结果为true
时,执行方法体中的代码。当方法体中的代码只有一句时,也可以写成:
if (逻辑表达式)
执行的代码
2. if…else…
if (逻辑表达式)
{
执行的代码
}
else
{
执行的代码
}
当逻辑表达式结果为true
时,执行if方法体中的代码,否则执行else
方法体中的代码。
3. if…else if…else…
if (逻辑表达式1)
{
执行的代码
}
else if (逻辑表达式2)
{
执行的代码
}
else if (逻辑表达式3)
{
执行的代码
}
...
else if (逻辑表达式n)
{
执行的代码
}
else
{
执行的代码
}
执行第一个逻辑表达式为true
的方法体中的代码,如果所有if
和else if
分支的逻辑表达式结果都是false
,则执行else
方法体中的代码
void main()
{
var intVar = 30;
if(intVar > 30)
{
print("age 30 more");
}
else if(intVar < 20)
{
print("age 20 less");
}
else
{
print("age is good");
}
}
// 打印结果为: age is good
4. switch
Dart中的switch语句使用==
,比较整数、字符串或编译时常量。比较的对象必须都是同一个类的实例(而不是其任何子类型的实例),并且该类不能重写==
。
注: Dart中的Switch语句是针对有限的情况,例如interpreters或scanners。
通常,每个非空case
子句以break语句结尾。结束非空case
子句的其他方法有continue
、throw
或return
语句。
当没有case
子句匹配时,使用default
子句执行代码:
void main()
{
var intVar = 30;
switch (intVar)
{
case 10:
print("num 10");
break;
case 12:
print("num 12");
break;
case 15:
print("num 15");
break;
default:
print("num ${intVar}");
}
}
// 打印结果为: num 30
以下代码省略了case
子句中的break
语句,因此发生错误:
void main()
{
var intVar = 30;
switch (intVar)
{
case 10:
print("num 10");
// 错误: 缺失 break
case 12:
print("num 12");
break;
case 15:
print("num 15");
break;
default:
print("num ${intVar}");
}
}
switch
允许使用从一个case
到另一个case
的贯穿形式:
void main()
{
var intVar = 30;
switch (intVar)
{
case 10:
case 12:
case 15:
case 30:
print("num 30");
break;
default:
print("num ${intVar}");
}
}
// 打印结果为: num 30
5. assert
assert语句在产品环境下是没有作用的,只有在开发状态下才会有效果。
flutter需要开启Debug模式; dart或者dartjs命令,需要添加参数–enable-asserts。
void main()
{
// assert_test.dart文件中的代码
var intVar = 30;
assert(intVar > 10);
print("int ${intVar}");
assert(intVar < 20);
print("int ${intVar}");
// dart assert_test.dart的结果
// int 30
// int 30
/
// dart --enable-asserts assert_test.dart 的结果
// int 30
// Failed assertion: line 50 pos 10: 'intVar < 20': is not true.
}
二、循环控制
1. for
for (计数初始值; 边界条件; 计数增量)
{
执行的代码
}
void main()
{
for (int i = 0; i < 3; i++)
{
print(i);
}
}
// 输出: 0 1 2
2. for…in
相当于Java语言中的for...each
句式,主要用于数组和集合的遍历
void main()
{
List a = [0, 1, 2, 3, 4];
for(dynamic x in a)
{
print(x);
}
}
// 输出: 0 1 2 3 4
3. forEach
定义在List
,Set
等集合中的方法,使用方式
void main()
{
List a = [0, 1, 2, 3, 4];
a.forEach((x) => print(x));
}
// 输出: 0 1 2 3 4
4. while
while
语句和for
循环语句有点类似,都是用于循环执行某段逻辑
void main()
{
int count = 0;
/**
while语句的第一种用法,格式:while(boolean值){方法体}
当boolean值为true时,循环执行方法体,否则结束退出
*/
while(count < 5)
{
print(count++); // 输出结果为: 0 1 2 3 4
}
print('count = $count'); // 输出结果为:count = 5
}
5. do-while
与while
循环类似,无论如何do
中的代码至少会被执行一次
void main()
{
int count = 5;
/**
while语句的第二种用法,格式:do{方法体}while(boolean值);
和上面不同的地方在于它会先执行do里面的方法体,后面再接着循环,而且每次也都会执行do
*/
do
{
print(--count); // 输出结果为:4 3 2 1 0
}
while (count > 0 && count < 5);
print('count = $count'); // 输出结果为: count = 0
}
6.break和continue语句
continue
表示轮空本次循环,进行下一次循环break
表示结束(跳出)整个循环
void main()
{
var list = [2,3,4];
for (var i = 0; i < list.length; i++)
{
if (i == 1)
{
// continue 本义是继续,作用为跳出本次循环,继续下面的循环,也就是说该层for循环遇到它,下面的方法体就不执行了,接着继续执行它以后的循环逻辑
continue;
}
print(list[i]); // 输出结果为: 2 4
}
print('--------------------------------');
var list2 = [4,5,6];
for (var item in list)
{
if (item == 3)
{
// break本义为打断,作用上它比continue更彻底,直接是断开循环,也就是说for循环遇到它,后面的循环都不执行了,直接退出
break;
}
for (var item in list2)
{
if(item == 5)
{
continue;
}
print(item); // 输出结果为: 4 6
}
}
}