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

上面比较容易犯错的时候是自增(++),自减(--)操作,我的注释已经比较详细了,希望小伙伴自己多去练练就没啥问题了。

###赋值运算符:

所谓赋值就是给一个变量或者常量赋值,整体而言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

###逻辑运算符:

所谓逻辑运算结果只有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

###关系运算符:

所谓关系运算就是操作元素之间比较大小,相等这些,这个和其他语言也基本相同,下面还是用代码来讲解吧!

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

##条件表达式

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

##基本类型转换

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

循环遍历

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
  • 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
  • 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
  • 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
  • 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
  • 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