Flutter学习之Dart运算符
###算术运算符:
所谓算术运算符,就相当于我们数学当中加,减,乘,除,取余,取整等等,在程序语言中又基本增加自增,自减等。
描述 | 操作符 |
---|---|
一元后缀 | expr++(递增) expr–(递减) () [] . ?. |
一元前缀 | -expr(负号) !expr (取反) ~expr(按位补码 0变为1;1变为0) ++expr(递增) --expr (递减) |
乘除 | * / %(取模) ~/(除号,但是返回值为整数) |
加减 | + - |
转移 | << >> |
按位与 | & |
位异或 | ^ |
按位或 | 竖线 |
关系和类型测试 | >= > <= < as is is! |
平等 | == != |
逻辑和 | && |
逻辑或 | 双竖线 |
if null | ?? |
条件选择 | expr1 ? expr2 : expr3 |
级联操作 | `` |
赋值操作 | = *= /= ~/= %= += -= <<= >>= &= ^= |
void main(){
//算术运算符
int a = 10;
int b = 5;
print(a + b);
print(b - a);
print(a * b);//乘法
print(a / b);
print(a ~/ b);//运算符(~/)为取除法结果的整数部分,这里结果为2
print(a % b);//运算符(%)为取除法结果的余数,这里结果为0
/**
*运算符(++),本意为自增
*当++在操作元素后(a++)时,先执行a本身,后执行++即自增,所以打印结果为a,打印完后a+1
*当++在操作元素前(++a)时,先执行++,再执行后续操作,所以打印结果为a+1
*/
print(a++);//由上面注释所知这时先打印a,所以结果为10,随后会进行自增,也就是接下来a会为11
print(++a);//由上面所得,a这个时候已经是11了,随后在打印之前会自增,所以结果为12
/**
*运算符(--),本意为自减
*当--在操作元素后(a--)时,先执行a本身,后执行--即自减,所以打印结果为a,打印完后a-1
*当--在操作元素前(--a)时,先执行--,再执行后续操作,所以打印结果为a-1
*/
print(a--);//由上面注释所知这时先打印a,所以结果为12,随后会进行自减,也就是接下来a会为11
print(--a);//由上面所得,a这个时候已经是11了,随后在打印之前会自减,所以结果为10
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
上面比较容易犯错的时候是自增(++),自减(--)操作,我的注释已经比较详细了,希望小伙伴自己多去练练就没啥问题了。
###赋值运算符:
所谓赋值就是给一个变量或者常量赋值,整体而言Dart中的赋值运算符和其他语言没有太多区别,下面还是以代码示例讲解吧!
//赋值运算符示例
void main(){
int a = 10;
int b = 5;
b ??= a; //??= 表示被赋值变量如为空则被赋值,反之则保持当前值。
print(b);//所以这里b还是原始值5
/*
*其实(a += 2)表达式就相当于a = a + 2,你可以简写成前面那样,对于小白你要知道的是
*在程序设计语言中表达式都是从右到左赋值的,所以这里打印的结果a为12
*/
a += 2;
print(a);
a -= 2;
print(a);//这里和上面也是一样的,就相当于a = a - 2,所以结果为10(程序是从上往下执行)
a *= b;
print(a);//相当于a = a * b,结果是50
//a /= b;
a ~/= b; //相当于a = a ~/ b,结果是10
print(a);
a %= b; //相当于a = a % b,结果为0
print(a);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
###逻辑运算符:
所谓逻辑运算结果只有true和false,所以逻辑运算符的操作元素一定要为bool值,与其他语言没有区别,下面上代码给大家看看!
void main(){
//逻辑运算符示例
bool isTrue = true;
print(!isTrue);//运算符(!)表示取反,所以这里结果为false
bool isFalse = false;
//运算符(&&)为短路与,在运算符前的结果为true时才会执行后面的操作,否则整个表达式执行完.
//它需要前后都为true,结果才为true,否则就是false
print(isTrue && isFalse);//所以这里结果为false
//运算符(||)为短路或,前后只需有一个true,结果则为true,否则就是false。
print(isTrue || isFalse);//所以这里结果为true
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
###关系运算符:
所谓关系运算就是操作元素之间比较大小,相等这些,这个和其他语言也基本相同,下面还是用代码来讲解吧!
void main() {
//关系运算符
int a = 1;
int b = 4;
print(a == b);
print(a != b);
print(a >= b);
print(a <= b);
print(a > b);
print(a < b);
String str1 = '123';
String str2 = '123';
//和Java等语言不同的是,Dart中比较两个变量是否相等统一用(==)运算符,包括string类型的也是这样
//这算是Dart的特点之一吧,所以下面结果为true
print(str1==str2);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
##条件表达式
Dart中条件表达式和其他语言有相似之处,也有不同的地方,下面继续使用代码示例和大家介绍
//条件表达式示例
void main(){
int gender = 1;
String a = 'james';
String b = 'kobe';
/**
*下面这个表达式称之为三目运算符表达式,结构为(表达式)?(表达式或者变量):(表达式或者变量)
*?前必须是boolean类型的结果,如果结果为true则把:前面的表达式或者变量赋值给Str
*如果结果是false则把:后面的表达式或者变量赋值给Str
*/
String str = gender == 0 ? 'male=$a':'female=$b';
print(str);//根据上面注释所得结果为female=kobe
String c = a ?? b; //当??前的变量或表达式不为空时,结果为这个变量或表达式的值,反之为后面的变量或表达式的值.
print(c);//所以这里打印结果为james
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##基本类型转换
void main(){
String str1= 'name';
String str2 = '123';
int num1 = 1;
double num2 = 2.2;
// int res1 = int.parse(str1); // err
int res2 = int.parse(str2);
print(res2);
double res3 = double.parse(str2);
print(res3);
// res2 = int.parse(num1); // err
print(num2.toString());
if(str1.isEmpty) {
print('str1 is not empty');
}
num2 = num2 / 0;
if(num2.isNaN) {
print('num2 is Nan');
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
循环遍历
Dart2的条件判断和循环语句,与java非常像,我们简单梳理一下,需要注意一下assert的用法。
if...else
void main() {
// 结果 age is good
var intVar = 30;
if(intVar > 30){
print("age 30 more");
}else if(intVar < 20){
print("age 20 less");
}else{
print("age is good");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
switch case
void main(){
var intVar = 30;
switch (intVar) {
case 12:
print("num 12");
break;
case 15:
print("num 15");
break;
default:
print("num ${intVar}");
}
// 结果 num 30
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
for
void main(){
for(var i=0; i < 10; i++){
print("index ${i}");
}
// 列表访问
var listVar = ["china", "usa"];
for(var country in listVar){
print(country);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
while和do..while
void main(){
var intVar = 2;
while(intVar > 0){
print("intVar ${intVar}");
intVar --;
};
do{
print("intVar ${intVar}");
intVar ++;
}while(intVar < 2);
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
break和continue
void main(){
for(var i=0; i<10; i++){
if(i % 2 == 0){
continue; // 跳过本次循环
}
if( i == 5){
break; // 中断循环
}
print("index ${i}");
}
// 结果
// index 1
// index 3
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
assert
assert语句在产品环境下是没有作用的,只有在开发状态下才会有效果。
flutter需要开启Debug模式; dart或者dart js命令,需要添加参数--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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17