美文网首页
Dart学习笔记——基础

Dart学习笔记——基础

作者: Jabir_Zhang | 来源:发表于2021-08-25 15:57 被阅读0次

    1、定义常量

    Dart 常量:final 和 const修饰符

    • const值不变 一开始就得赋值。
    • final 可以开始不赋值,只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化。(能够定义常量对象,const不可以)
      永远不改量的量,请使用final或const修饰它,而不是使用var或其他变量类型。
    //const常量
    const PI=3.14159;
    // PI=123.1243; //错误的写法 常量不可以修改
    print(PI);
    
    // final 常量
    final PI = 3.14159;
    // PI = 124214.214124; //错误写法
    print(PI);
    
    final a = new DateTime.now();
    print(a); //2019-05-10 15:59:02.966122
    //const a=new DateTime.now();   //报错了
    

    数据类型

    1、 List

    //1、第一种定义List的方式
    var l1 = ["张三",20,true];
    print(l1);  //[张三, 20, true]
    print(l1.length);  //3
    print(l1[0]); //张三
    print(l1[1]); //20
    
    //2、第二种定义List的方式 指定类型
    var l2=<String>["张三","李四"];
    print(l2);
    var l3 = <int>[12, 30];
    print(l3);
    
    //3、第三种定义List的方式  增加数据 ,通过[]创建的集合它的容量可以变化
    var l4 = [];
    print(l4);
    print(l4.length);
    
    l4.add("张三");
    l4.add("李四");
    l4.add(20);
    print(l4);
    print(l4.length);
    
    var l5 = ["张三", 20, true];
    l5.add("李四");
    l5.add("zhaosi");
    print(l5);
    
    //4、第四种定义List的方式
    //  var l6=new List();  //在新版本的dart里面没法使用这个方法了
    
    var l6=List.filled(2, "");  //创建一个固定长度的集合
    print(l6);
    print(l6[0]);
    
    l6[0]="张三";   //修改集合的内容
    l6[1]="李四";
    print(l6);  //[张三, 李四]
    
    // l6.add("王五");  //错误写法
    
    //通过List.filled创建的集合长度是固定 
    // var l6=List.filled(2, "");
    // print(l6.length); 
    // l6.length=0;  //修改集合的长度   报错
    
    var l7=<String>["张三","李四"];
    print(l7.length);  //2
    l7.length=0;  //可以改变的
    print(l7);  //[]
    
    var l8=List<String>.filled(2, "");
    l8[0]="string";
    // l8[0]=222;//报错,不是string类型
    print(l8);
    

    2、 Maps(字典)

    //第一种定义 Maps的方式
    var person={
      "name":"张三",
      "age":20,
      "work":["程序员","送外卖"]
    };
    print(person);//{name: 张三, age: 20, work: [程序员, 送外卖]}
    print(person["name"]);//张三
    print(person["age"]);//20
    print(person["work"]);//[程序员, 送外卖]
    
    //第二种定义 Maps的方式
    var p=new Map();
    p["name"]="李四";
    p["age"]=22;
    p["work"]=["程序员","送外卖"];
    print(p);//{name: 李四, age: 22, work: [程序员, 送外卖]}
    print(p["age"]);//22
    

    3、 类型判断

    var str=123;
    if(str is String){
       print('是string类型');
    }else if(str is int){
      print('int');
    }else{
      print('其他类型');
    }
    

    运算符

    1. 算术运算符:
    + - * / ~/ (取整) %(取余)
    int a=13;
    int b=5;
    print(a~/b);  //2 取整
    
    1. 关系运算符:
    == != > < >= <=
    1. 逻辑运算符:
    ! && ||
    1. 赋值运算符:
    基础赋值运算符 = ??=
    复合赋值运算符 += -= *= /= %= ~/=
    1. 条件表达式:
    if else switch case 三目运算符 ??运算符

    流程控制(循环)

    和大部分语言一样的for循环和while,很常规。

    1、自增 自减

    ++ -- 表示自增 自减 1
    在赋值运算里面 如果++ -- 写在前面 这时候先运算 再赋值,如果++ --写在后面 先赋值后运行运算。(很多新语言已经废弃这种自增自减了)

    2、for循环

    // for基本语法
       for (int i = 1; i<=100; i++) {   
          print(i);
       }
    
    //第一步,声明变量int i = 1;
    //第二步,判断i <=100
    //第三步,print(i);
    //第四步,i++
    //第五步 从第二步再来,直到判断为false
    

    3、while和do...while

    //语法格式:
    while(表达式/循环条件){            
    
    }   
            
    do{
         语句/循环体
    }while(表达式/循环条件);
    
    /*注意: 
    1、最后的分号不要忘记
    2、循环条件中使用的变量需要经过初始化
    3、循环体中,应有结束循环的条件,否则会造成死循环。
    */
    

    4、break和continue

    /*
    break语句功能:
    1、在switch语句中使流程跳出switch结构。
    2、在循环语句中使流程跳出当前循环,遇到break 循环终止,后面代码也不会执行
    强调:
    1、如果在循环中已经执行了break语句,就不会执行循环体中位于break后的语句。
    2、在多层循环中,一个break语句只能向外跳出一层
    break可以用在switch case中 也可以用在 for 循环和 while循环中
    
    continue语句的功能:
    【注】只能在循环语句中使用,使本次循环结束,即跳过循环体重下面尚未执行的语句,接着进行下次的是否执行循环的判断。
    continue可以用在for循环以及 while循环中,但是不建议用在while循环中,不小心容易死循环
    */
    

    数据类型常用的属性和方法

    1、List

    /*
    List里面常用的属性和方法:
    
        常用属性:
            length          长度
            reversed        翻转
            isEmpty         是否为空
            isNotEmpty      是否不为空
        常用方法:  
            add         增加
            addAll      拼接数组
            indexOf     查找  传入具体值
            remove      删除  传入具体值
            removeAt    删除  传入索引值
            fillRange   修改   
            insert(index,value);            指定位置插入    
            insertAll(index,list)           指定位置插入List
            toList()    其他类型转换成List  
            join()      List转换成字符串
            split()     字符串转化成List
            forEach   
            map
            where
            any
            every
    */
    
    //List里面的属性:
    List myList=['香蕉','苹果','西瓜'];
    print(myList.length);
    print(myList.isEmpty);
    print(myList.isNotEmpty);
    print(myList.reversed);  //对列表倒序排序
    var newMyList=myList.reversed.toList();
    print(newMyList);
    
    //List里面的方法:
    myList.add('桃子');   //增加数据  增加一个
    myList.addAll(['桃子','葡萄']);  //拼接数组
    print(myList.indexOf('苹x果'));    //indexOf查找数据 查找不到返回-1  查找到返回索引值
    myList.remove('西瓜');
    myList.removeAt(1);
    myList.fillRange(1, 3,'bbb');  //[香蕉, bbb, bbb](index1~3修改为bbb)
    myList.insert(1,'aaa');  //插入一个  [香蕉, aaa, 苹果, 西瓜]
    myList.insertAll(1, ['aaa','bbb']);  //插入多个  [香蕉, aaa, bbb, aaa, 苹果, 西瓜]
    var str=myList.join('-');   //list转换成字符串  香蕉-苹果-西瓜
    var str='香蕉-苹果-西瓜'; var list=str.split('-'); //字符串变成数组 [香蕉, 苹果, 西瓜]
    

    2、set

    • 用它最主要的功能就是去除数组重复内容。
    • Set是没有顺序且不能重复的集合,所以不能通过索引去获取值。
    var s=new Set();
    s.add('香蕉');
    s.add('苹果');
    s.add('苹果');
    print(s);   //{香蕉, 苹果}
    print(s.toList()); //[香蕉, 苹果]
    
    //数组去重
    List myList=['香蕉','苹果','西瓜','香蕉','苹果','香蕉','苹果'];
    var s=new Set();
    s.addAll(myList);
    print(s);//{香蕉, 苹果, 西瓜}
    print(s.toList());//[香蕉, 苹果, 西瓜]
    

    3、map

    /*
      映射(Maps)是无序的键值对:
    
        常用属性:
            keys            获取所有的key值
            values          获取所有的value值
            isEmpty         是否为空
            isNotEmpty      是否不为空
        常用方法:
            remove(key)     删除指定key的数据
            addAll({...})   合并映射  给映射内增加属性
            containsValue   查看映射内的值  返回true/false
            forEach   
            map
            where
            any
            every
    */
    
    //常用属性:
    Map person={
      "name":"张三",
      "age":20,
      "sex":"男"
    };
    
    print(person.keys.toList());//[name, age, sex]
    print(person.values.toList());//[张三, 20, 男]
    print(person.isEmpty);//false
    print(person.isNotEmpty);//true
    
    //常用方法:
    Map person={
      "name":"张三",
      "age":20,
      "sex":"男"
    };
    person.addAll({
      "work":['敲代码','送外卖'],
      "height":160
    });
    print(person);//{name: 张三, age: 20, sex: 男, work: [敲代码, 送外卖], height: 160}
    person.remove("sex");
    print(person);//{name: 张三, age: 20, work: [敲代码, 送外卖], height: 160}
    print(person.containsValue('张三'));//true
    

    4、forEach、map、where、any、every

    1. forEach
    //List
    List myList=['香蕉','苹果','西瓜'];
    myList.forEach((value){
        print("$value");
    });//香蕉 苹果 西瓜
    
    // set
    var s=new Set();
    s.addAll([1,222,333]);
    s.forEach((value)=>print(value));//箭头写法 1 222 333
    
    //map
    Map person={
       "name":"张三",
       "age":20
    };
    person.forEach((key,value){            
        print("$key---$value");
    });//name---张三 age---20
    
    1. map
    List myList=[1,3,4];      
    var newList=myList.map((value){
          return value*2;
    });
    print(newList.toList());//[2, 6, 8]
    
    1. where
    List myList=[1,3,4,5,7,8,9];
    var newList=myList.where((value){
          return value>5;
    });
    print(newList.toList());//[7, 8, 9]
    
    1. any
    List myList=[1,3,4,5,7,8,9];
    var f=myList.any((value){   //只要集合里面有满足条件的就返回true
          return value>5;
    });
    print(f);//true
    
    1. every
    List myList=[1,3,4,5,7,8,9];
    var f=myList.every((value){   //每一个都满足条件返回true  否则返回false
          return value>5;
    });
    print(f);//false
    

    相关文章

      网友评论

          本文标题:Dart学习笔记——基础

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