美文网首页
Dart语法

Dart语法

作者: GaoXiaoGao | 来源:发表于2020-11-06 14:32 被阅读0次

    1.Dart程序运行的入口是main函数,所以写一段Dart程序时,必须要有main函数

    void main(List<String> args){
      print("Hello Dart");
    }
    

    2.Dart定义变量

    Dart为强类型语言

    第一种定义变量方式,明确类型声明,如

     String name = "xiaoming";
      int age = 1;
      double height = 12.1;
    
     int a = "xiaoming"; //错误的定义方式
    
      print("${name} ${age} ${height}");
    
      //如果是变量的话{}可以省略,有的时候不能省略
      print("$name $age $height");
    
      //打印类型
      print(name.runtimeType);
      print(age.runtimeType);
      print(height.runtimeType);
    
    

    第二种定义变量方式,类型推导方式,如

      var hint = "hello";
      //hint = 100; //错误的赋值,hint为String类型
      print("$hint");
    
    
    const name1="你好"; //常量,不可再赋值
    final name2="你好"; //常量,不可再赋值
    
      //区别
      // const 声明时必须直接赋值
      // final 可以运行时赋值,如接收一个函数的返回值
    
      dynamic cc = "a";
      cc = 10; //可以
      print(cc.runtimeType);
    

    3.Dart支持10进制和16进制,其他不支持

    4.Dart中不通过非空值作为Boolean 类型来判断

    String s = "123";
    if(s){ //行不通
        //
    }
    

    5.定义字符串的三种方式,三种方式都可以

    String s1 = "123456";
    String s2 = '123456';
    String s3 = ''' 
     abc 
     def
     ''';
    
    
      //当$后面是表达式时,则必须放在{}中
      print("name:${name.runtimeType} age:${age.runtimeType} height:${height.runtimeType}");
    

    6.集合

    List Set Map

    void main(List<String> args){
    
      List<String> nameList = ['xiaoming','xiaohong','xiaogang','xiaoming','xiaohong'];
      Set<int> numberList = {1,2,3,4,5,6};
    
      // print(nameList);
      // print(numberList);
      // Set集合不能有重复元素,可以使用Set来去重
      List<String> newNameList = List.from(Set.from(nameList));
        print(newNameList);
    
        Map<String,dynamic> info = {
          "name":"yes",
          "age":18,
          "height":2.1
        };
        print(info);
    
    }
    

    7.Dart的函数

    //如何让函数的参数可传可不传?
    两种方式:
    1.通过[]将参数括起来是位置方式,值参会按顺序传参,如果不传为null
    2.通过{}将参数括起来是命令方式,传参数时以key:value的形式传参

    可以给可选参数设置默认值,必传参数不可设置默认值

    void main(List<String> args){
    
    testFun1("li",18,29.1);
    testFun1("li");
    testFun1("li",16);
    
    testFun2("li",age:12);
    }
    
    void testFun1(String name,[int age=20,double height]){
    // age=20表示没有参数时,使用默认值20
      print(name);
      print(age);
      print(height);
    
    }
    
    void testFun2(String name,{int age=20,double height}){
    
      print(name);
      print(age);
      print(height);
    
    }
    

    函数可以作为另一个函数的参数传递

    void main(List<String> args){
      testFun2(testFun1);  
    }
    
    void testFun1(){
      print("函数可以作为参数传递");
    }
    
    void testFun2(Function test){
    
     test();
    
    }
    

    函数可以作为另一个函数的返回值

    void main(List<String> args){
      Function tempFunc = testFun2();  
      tempFunc(); //调用返回的函数
    }
    
    void testFun1(){
      print("函数可以作为另一个函数的返回值");
    }
    
    Function testFun2(){
     return testFun1;
    }
    

    匿名函数的使用

    void main(List<String> args){
    
        List<String> nameList = ['xiaoming','xiaohong','xiaogang'];
    
        //forEach()中要求传一个函数,可以通过 (参数) {} 直接定义一个匿名函数传入 
        nameList.forEach((item){
          print(item);
        });
    
        //如果只有一行简单的代码,可以使用箭头函数
         nameList.forEach((item)=> print(item));
    }
    

    map函数的使用

    List<String> nameList = ['xiaoming','xiaohong','xiaogang'];
    final result = nameList.map((item)=> item+"hahaha");
    print(result);
    
    //将result转换为一个数组
    final result = List.from(nameList.map((item)=> item+"hahaha"));
    print(result);
    
    

    8.类

    main(List<String> args){
    
    // final p = new Person();
    final p = Person(); //Dart 2.0以上版本 可以省略new 
    
    p.name="gao";
    p.age = 12;
    p.eating();
    
    }
    
    class Person {
      
      String name;
      int age;
      void eating(){
        print("${this.name}在吃早餐");
      }
    }
    

    9.构造函数

    1.无构造函数时,默认创建一个无参构造函数
    2.Dart不支持构造函数的重载

    main(List<String> args){
    
    // final p = new Person();
    // final p = Person("xiaoming",12); //Dart 2.0以上版本 可以省略new 
    
    // final p = Person("xiaoming"); 
    
    // final p = Person(name:"xiaoming", shengao:170); 
    
    
    
      Map<String,dynamic> params = {
        "name":"Jerry",
        "age":20,
        "shengao":190
      };
    
      final p = Person.fromMap(params);
    
      // p.name="gao";
      // p.age = 12;
      p.eating();
    
    }
    
    class Person {
      
      String name;
      int age;
      int shengao;
    
      //方式1
      // Person(String name, int age){
      //   this.name = name;
      //   this.age = age;
      // }
    
      //方式2
      //  Person(String name,[int age,int shengao]){
      //   this.name = name;
      //   this.age = age;
      //   this.shengao = shengao;
      // }
    
      //方式3
      //  Person(String name,{int age,int shengao}){
      //   this.name = name;
      //   this.age = age;
      //   this.shengao = shengao;
      // }
    
      
      //   //方式4
      //  Person({String name,int age,int shengao}){
      //   this.name = name;
      //   this.age = age;
      //   this.shengao = shengao;
      // }
    
          //方式5 语法糖写法,效果与方式4一致
      、// Person({this.name, this.age, this.shengao});
    
       //初始化列表 可以在:后面初始化列表
       Person({this.name, this.age, this.shengao}) : twoAge = age * 2;
    
    
      //方式6 通过传入map数据来创建构造函数
      //命名构造函数
      Person.fromMap(Map<String, dynamic> map) {
          this.name = map["name"];
          this.age = map["age"];
          this.shengao = map["shengao"];
      }
    
    
      void eating(){
        print("${this.name}在吃早餐");
      }
    }
    
    

    10.抽象类

    抽象类跟java中类似
    默认类也是接口,可以被implements

    11. dynamic和Object有什么区别?

    Dart中默认所有类继承自Object
    dynamic 可以动态指定类型

    相关文章

      网友评论

          本文标题:Dart语法

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