Dart使用細節

1.判斷2個字符串是否一樣使用==號

        // 判斷兩個字符串是否相等
        bool equal(String str1, String str2) {
          return str1 == str2;
        }

2.可選參數

        // 這個方法裏有個特殊地方[String from]這個字段是可以不傳的,在字符串中使用$符合可以取得作用域裏的參數
        String getUserInfo(String name, String sex, [String from]) {
          var info = '$name的性別是$sex';
          if (from != null) {
            info = '$info來自$from';
          }
          return info;
        }
        void test(){
          print(getUserInfo('小王', '男'));
        }

還可以給這個可選參數給默認值

        // 使用等號( = )來設置默位置字參數這樣不傳時候就不會是null
        String getUserInfo(String name, String sex, [String from = '中國']) {
          var info = '$name的性別是$sex';
          if (from != null) {
            info = '$info來自$from';
          }
          return info;
        }
        void test(){
          print(getUserInfo('小王', '男'));
        }

3.自己縷一縷

        var a, b;
        a = 0;
        b = ++a; //在b獲得其值之前自增a
        assert(a == b); //1 == 1


        a = 0;
        b = a++; //在b獲得值後自增a
        assert(a != b); //1 != 0


        a = 0;
        b = --a; //在b獲得其值之前自減a
        assert(a == b); //-1 == -1


        a = 0;
        b = a--; //在b獲得值後自減a
        assert(a != b); //-1 != 0

4.as、is和is!操作符在運行時用於檢查類型非常方便

//直接使用is就可以對比

        if (user is User) {
          // 類型檢測
          user.name = 'Flutter';
        }

//直接使用as可以強制轉換
        (user as User).name = 'Flutter';

5.賦值操作符

        // 賦值給a
        a = value;
        // 如果b爲空,則將值分配給b;否則,b保持不變
        b ??= value;

6.條件表達式如果條件爲真,則返回expr1,否則返回expr2:

condition ? expr1 : expr2

7.級聯操作

//其中的“..”符號代表的就是 querySelector('#btnOK).

        querySelector('#btnOK) //獲取一個id爲btnOK的按鈕對象
          ..text = '確定'        //使用它的成員
          ..classes.add('ButtonOKStyle')
          ..onClick.listen((e) => window.alert('確定'));

8.for循環

//這種循環獲取不到數組下標,只能獲得對應下標的值v

        var arr = [0, 1, 2, 3, 4, 5, 6];
          for (var v in arr) {
            print(v);
          }

9.assert如果assert的判斷爲true,則繼續執行下面的語句;反之則會拋出一個斷言錯誤異常AssertionError

        // 確定變量的值不爲null
        assert(text != null);

10.對象get和set會默認給建立不需要設置

        class User{
          String name; //name成員變量
          int age; //age成員變量
        }
        main() {
          var user = new User();
          user.name = '張三'; //相當於使用了name的setter方法
          user.age = 20;


        }

11.重載操作

        // 定義一個向量類
        class Vector {
          final int x;
          final int y;
          const Vector(this.x, this.y);

          //重載加號 + (a + b)
          Vector operator +(Vector v) {
            return Vector(x + v.x, y + v.y);
          }
          //重載減號 - (a - b)
          Vector operator -(Vector v) {
            return Vector(x - v.x, y - v.y);
          }
        }
        main() {
          // 實例化兩個向量
          final v = Vector(2, 3);
          final w = Vector(2, 2);
          final r1 = v + w;

//意思就是x=2+2;y=3+2
          print('r1.x='+r1.x.toString() + ' r1.y=' + r1.y.toString());
          final r2 = v - w;

//意思就是x=2-2;y=3-2
          print('r2.x='+r2.x.toString() + ' r2.y=' + r2.y.toString());
        }

12.枚舉類型

        enum Color {
          red,
          green,
          blue
        }
        // 定義一個顏色變量,默認值爲藍色
        Color aColor = Color.blue;
        switch (aColor) {
          case Color.red:
            print('紅色');
            break;
          case Color.green:
            print('綠色');
            break;
          default: //默認顏色
            print(aColor);   //'Color.blue'
        }

13.Mixins

        class S {
          a() {print("S.a");}
        }
        class A {
          a(){print("A.a");}
          b(){print("A.b");}
        }

        class T = A with S;
        main(List<String> args) {
          T t = T();
          t.a();
          t.b();
        }

輸出因爲AwithB所以使用B優先

S.a

A.b

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章