Dart与Java不同的地方

数据类型

  • 基类是num

  • 数值型的操作

运算符: +、 - 、* 、/ 、 ~/ 、 %

  • / 除法 整数+余数
  • ~/ 除法 取整
  • % 取余

常用属性: isNaN、isEven、isOdd (是否非数字、奇偶)

常用方法:abs()、round()、floorl()、ceil()、toInt()、toDouble()

  • double nan = 0.0 / 0.0;
    nan ->  not a number  只有这种情况才是非数字
  • abs 绝对值
  • round 最接近的整数 Returns the integer closest to this.
  • floor 不比它大的整数 Returns the greatest integer no greater than this.
  • ceil 不比它小的整数 Returns the least integer no smaller than this.

string 字符串

    String a = '''asdfasdf
    ==asdfasdf''';
    String b = 'aaa \n  bbb';
    String bb = r'aaa \n  bbb';
    print(a);
    print(b);
    print(bb);
  • 单引号能存储字符串
    var aaa = 'asdfasdf';
  • 三个单引号是保存长字符串,支持换行
  • r 关键字是不能使用转义字符
     asdfasdf
         ==asdfasdf
     aaa 
       bbb
     aaa \n  bbb
  • 字符串* []
    String b = 'agggb';
    print(b*5);
    print(b[4]);
    
    I/flutter ( 7429): agggbagggbagggbagggbagggb
    I/flutter ( 7429): b

集合

  • List
  • list集合可以存储不同类型的数据
  • 遍历可以直接传入方法
  • 加了const关键字说明不可修改
    var list =[1,"asdfas",'aaaa',false,0.2];
    print(list);
    list[0]="hhh";
    print(list);

    var list2 = const[1,2,3];
    var list3=new List();

    list.forEach(print);
    
    I/flutter (26396): [1, asdfas, aaaa, false, 0.2]
    I/flutter (26396): [hhh, asdfas, aaaa, false, 0.2]
    I/flutter (26396): hhh
    I/flutter (26396): asdfas
    I/flutter (26396): aaaa
    I/flutter (26396): false
    I/flutter (26396): 0.2
  • Map
  • 可以存储不同类型的变量
  • 加了const关键字说明不可修改
  • List转Map key是从0开始排序的
  • foreach可以传入自定义方法
    var map={"ad":22,3:"gggg",1:"asd",true:'aa',0.58:'asdf'};
    print(map[true]);
    print(map["ad"]);
    map[1]=false;
    print(map[1]);
    var finalMap = const{1:2};

    map.forEach(myPrint);

    print(map.keys);
    print(map.values);

    var list =['aaa','f',"asd",false,0.85];
    print(list.asMap());
    
    void myPrint(key,value){
        print("key=$key,value=$value");
    }
    
    
    I/flutter (17298): aa
    I/flutter (17298): 22
    I/flutter (17298): false
    I/flutter (17298): key=ad,value=22
    I/flutter (17298): key=3,value=gggg
    I/flutter (17298): key=1,value=false
    I/flutter (17298): key=true,value=aa
    I/flutter (17298): key=0.58,value=asdf
    I/flutter (17298): (ad, 3, 1, true, 0.58)
    I/flutter (17298): (22, gggg, false, aa, asdf)
    I/flutter (17298): {0: aaa, 1: f, 2: asd, 3: false, 4: 0.85}
  • dynamic
  • 动态类型
    dynamic b = 20;
    b="kotlin";

    //list本来就可以存动态类型
    var dList = new List<dynamic>();
    dList.add(1);
    dList.add("bala");
    print(dList);

    var list = new List();
    list.add("asdf");
    list.add(false);
    print(list);

运算符

  • ??
  • 有值的时候直接使用当前值,没有值的时候使用赋值的值
  • a ?? b a 有值就用 a 的值 ,否则用 b 的值
    int a = 10;
    a ??= 66;
    print(a);
    
    
    var a;
    var b = "kotlin";
    print(a??b);
    
    I/flutter (20501): kotlin

方法

  • 没有返回值类型可以省略void不写
  • 参数可以不写类型
  • 方法体只有一个语句可以用 => 代替
      myPrint(key,value){
        print("key=$key,value=$value");
      }
      
      testReturn1(a, b) => "$a,$b";
    
      var hello = 1;
      testReturn2(a, b) => hello == 1 ? "$a" : "$b";
  • {} 大括号包裹的是可选命名参数,调用的时候一定要 name:value 的形式
  • [] 中括号包裹的是可选位置参数
  • 如果既有可选参数又有普通的参数,那么普通的参数一定要写在前面
    print(myPrint(1, value:2));
    print(myPrint1(1, "asdf",1));
    
      //可选命名参数
      myPrint(key, {value,age}) {
        print("key=$key,value=$value,age=$age");
      }
    
      //可选位置参数
      myPrint1(key, [String value,aa]) {
        print("key=$key,value=$value,aa=$aa");
      }
  • 可选参数可以有默认值,并且真正传入的值的数据类型可以和默认值不同
    print(myPrint1(1, "asdf",1));
    
    //可选位置参数
    myPrint1(key, [value=10,aa]) {
        print("key=$key,value=$value,aa=$aa");
    }
  • 方法可以赋值给变量
    var fun01 = myPrint;
    var fun02 = myPrint(1, value:2);
    Function fun03 = myPrint(1, value:2);
  • 字符乘法
    var times01 = times;
    print(listTimes(list02, times01));
        
    String times(str) => str*3;
    
    List listTimes(List list,String times(str)){
        for(int i =0;i<list.length;i++){
            list[i]=times(list[i]);
        }
        return list;
    }
      
    I/flutter (28302): [aaa, bbb, ccc, ddd]
  • 匿名方法
    (str) {
        print("bala~~$str");
    };
  • 匿名变量赋值给变量,可以直接使用
    var fun01 = (str) {
      print("bala~~$str");
    };
    fun01("asdf");
  • 直接调用匿名方法
    ((){
      print("bbbbbbbbaaaaaa");
    })();
  • 匿名方法demo
    var list = ["b","a","l","a"];
    
    print(listTimes01(list));
    
    List listTimes01(List list) {
        var func = (str){return str*3;};
        for (int i = 0; i < list.length; i++) {
          list[i] = func(list[i]);
        }
        return list;
    }

闭包

  • 闭包是一个方法(对象)
  • 闭包可以访问外部方法的局部变量,并持有其状态
  • 注意闭包 a 中返回 printCount 和 printCount()的区别
        a(){
    
            int count = 6;
          /*printCount(){
            print(++count);
            }
            return printCount;*/
    
            return (){
                print(++count);
            };
    
        }
        
        var func = a();
        func();
        func();
        func();
        
        I/flutter (28650): 7
        I/flutter (28650): 8
        I/flutter (28650): 9

推荐阅读更多精彩内容