第二節: Dart 操作符(運算符)

Dart 語法學習目錄

第一節: Dart 語法了解,認識變量,常量,數據類型
第二節: Dart 操作符(運算符)
第三節: Dart 中常用集合 List/Map
第四節: Dart 函數使用,聲明函數/匿名函數/可選參數/作用域/閉包
第五節: Dart 面向對象/構造函數/靜態屬性
第六節: Dart中抽象類abstract/接口implements/混入Mixin
第七節: Dart中泛型/泛型定義與使用
第八節: Dart 中的庫/自定義庫/內置庫/第三方庫

1. 算術運算符

+ - * / % (取余) ~/(取整)

void main(){

    // 算術運算符
    int num1 = 13;
    int num2 = 5;

    print(num1 + num2);  // 加  18
    print(num1 - num2);  // 減   8
    print(num1 * num2);  // 乘  65
    print(num1 / num2);  // 除  2.6
    print(num1 % num2);  // 取余  3
    print(num1 ~/ num2);  // 取整 2

}

2. 一元運算符

-expr負數 ++expr 遞增 expr++ 遞增 --expr遞減 expr--遞減

void main(){

    // 一元運算符
    int num = 13;
    int num2 = 5;

    // 負數
    print(-num);  // 負數 -13

    // 遞增
    ++ num;
    num2 ++;
    print(num);    // 14
    print(num2);   // 6

    // 遞減
    -- num;
    num2 --;
    print(num);    // 13
    print(num2);   // 5

}

那么++在前在后有什么區別呢

如果不用再表達式中, 在前在后都一樣, 都是對當前變量的遞增.

如果是在表達式中參與運算結果就不一樣了

void main(){

    // 一元運算符 
    int num = 13;

    // ++ 操作符
    int price = num + 12;
    print(price);   // 25
    print(num);     // 13   普通加法 num值不變

    // ++ 操作符在前
    int price2 = ++num + 12;
    print(price2);       // 26
    print(num);          // 14  

    // ++ 在前是先運算自增,然后在運算表達式
    // 等價于
    // ++num  // num+1 變成了14
    // int price2 = num + 12   此時num是14  所以price2值為16

    // ++ 操作符在后
    int price3 = num++ + 12;
    print(price3);       // 26
    print(num);          // 15

    // ++ 在后是先運算表達式,然后在運算自增
    // 等價于
    // int price3 = num + 12   此時num是14  所以price2值為16
    // num++   自增等價于 num+1 變成了15

}

也就是++自增運算符無論在前在后對于變量本事來說都是一樣的,就是自身值加1,

所以如果不參與表達式運算, 對于變量本事沒有影響

如果參與到表達式中運算, ++在前就是變量先自增,然后用自增的結果參與運算

++在后, 就是先用變量之前的值參與表達式運算, 在讓變量自己自增.

3. 關系運算符

== 相等 !=> 大于 < 小于 >= 大于等于 <=小于等于

void main(){

  // 關系運算符
  int num1 = 13;
  int num2 = 5;

  print(num1 == num2);  // 判斷是否相等
  print(num1 != num2);  // 判斷是否不等
  print(num1 > num2);  // 判斷是否大于
  print(num1 < num2);  // 判斷是否小于
  print(num1 >= num2);  // 判斷是否大于等于
  print(num1 <= num2);  // 判斷是否小于等于

}

關系運算符主要用到條件判斷里

void main(){

  // 關系運算符
  int num1 = 13;
  int num2 = 5;

  // 條件判斷
  if(num1 > num2){
    print("num1 大于 num2");
  }else{
    print("num1 不大于 num2");
  }

}

4. 邏輯運算符

!取反 && 邏輯與(并且的意思) || 邏輯或(或者的意思)

void main(){

  // 邏輯運算符
  bool a = true;
  bool b = false;

  print(!a);
  print(a && b);
  print(a || b);

}

5. 賦值運算符

基礎賦值運算符

= 賦值 ??= 變量為 null 時才會賦值,變量不為null不賦值

復合賦值運算符

+= 加等于 -=減等于 *=乘等于 /=除等于 %= 取模等于 ~/=取整等于

5.1 基礎賦值
void main(){

  // 賦值運算符
  // 1\. 基本的賦值運算符
  // 普通賦值
  int num = 20;
  int num2 = num;
  print(num);
  print(num2);

  // 判斷變量是否為空,為空才賦值,不為空則不賦值
  int n = 6;
  n ??= 23;   // 如果n為空,就賦值23,否則就不給n賦值
  print(n);    // 6

  int n = null;
  n ??= 23;   // 如果n為空,就賦值23,否則就不給n賦值
  print(n);  // 23
}

5.2 復合賦值
void main(){

    // 賦值運算符
    // 2\. 復合賦值運算符
    // 普通賦值
    double num = 30.0;
    int num2 = 20;

    //   += 加等于
    //   num += num2;
    //   print(num);    // 50
    //   print(num2);   // 20

    //   -= 減法等于
    //   num -= num2;
    //   print(num);    // 10
    //   print(num2);   // 20

    //   *= 乘等于
    //   num *= num2;
    //   print(num);    // 600
    //   print(num2);   // 20

    //   /=  除等于
    //   num /= num2;
    //   print(num);    // 1.5
    //   print(num2);   // 20

    //   %= 取模等于
    //   num %= num2;
    //   print(num);    // 10
    //   print(num2);   // 20

    int result = 30;

    //   ~/= 取整等于
    //   result ~/= num2;
    //   print(result);    // 1
    //   print(num2);   // 30

}

6 條件表達式

condition ? expr1 : expr2 三目運算符

expr1 ?? expr2 返回其中不為空的表達式執行結果

6.1 三目運算符
void main(){

  // 三目運算符怒
  bool flag = false;
  String c;
  // if(flag){
  //   c = "我是true";
  // }else{
  //   c = "我是false";
  // }

  // print(c);

  // 三目寫法
  c = flag ? "我是true": "我是false";
  print(c);
}

6.2 ?? 運算符

返回其中不為空的表達式執行結果

void main(){

  // ?? 運算符 (有點類似于默認值的感覺)
  int num;
  int num2 = num ?? 23;  // num的值為空,所以將23賦值給num2
  print(num2); // 23

  int a = 10;
  int b = a ?? 23; // a的值不為空,所以將a的值賦值給b
  print(b);   // 10

}

7 .. 聯級運算符

..:級聯操作符 .. 可以在同一個對象上 連續調用多個函數以及訪問成員變量。使用級聯操作符可以避免創建臨時變量,并且寫出來的代碼看起來更加流暢。

class Person{
    // 屬性
    String name ="小明";
    int age = 18;
    String sex = "男";

    void getInfo(){
        print("${this.name}:${this.age}:${this.sex}");
    }

}

void main(){
    Person student = new Person() ;
    student.getInfo();  // 小明:18:男

    // 修改屬性值
    // student.name = "小紅";
    // student.age = 14;
    // student.sex = "女";
    // student.getInfo();   // 小紅:14:女

    // 修改多個屬性值可以使用聯級調用
    // 結果完全一樣
    student..name = "小紅"
        ..age = 14
        ..sex = "女";
    student.getInfo();   // 小紅:14:女
}

如果class類不太明白的話也不要緊,后面會繼續講解.

8 類型判定運算符

as, is, 和 is! 運算符用于在運行時處理類型檢查:
as:類型轉換
is:如果對象是指定的類型返回 True
is!:如果對象是指定的類型返回 False
具體例子參考面向對象的總結

9 其他操作符

  1. ():使用方法。代表調用一個方法
  2. []:訪問 List。訪問 list 中特定位置的元素
  3. .:訪問成員(屬性)。訪問元素,例如 foo.bar 代表訪問 foo對象 的 bar 成員
  4. ?.:條件成員訪問。和 . 類似,但是左邊的操作對象不能為 null,例如
  5. foo?.bar 如果 foonull 則返回 null,否則返回 bar 成員
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容