Dart与Java不同的地方

作者: 喂_balabala | 来源:发表于2019-10-10 13:47 被阅读0次

    数据类型

    • 基类是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
    

    相关文章

      网友评论

        本文标题:Dart与Java不同的地方

        本文链接:https://www.haomeiwen.com/subject/lbnopctx.html