美文网首页
dart基础

dart基础

作者: 淹死丶的鱼 | 来源:发表于2019-03-28 13:27 被阅读0次

    dart文件命名是小写字母和下划线组成,没有基本数据类型一切皆对象,和很多语言一样是main方法为入口方法
    支持顶部函数

    void main(){
      print('aa');
    }
    
    内置的类型

    ​ 与Java的八大内置基本数据类型不同,Dart 内置支持下面这些类型:

    • numbers
    • strings
    • booleans
    • lists (也被称之为 arrays)
    • maps
    • runes (用于在字符串中表示 Unicode 字符)
    • symbols
    变量的定义

    变量命名有好几种方式可以

    void main(){
      Object f="";///和java一样任何类默认都继承Object
      String a="";///可以和koltin一样通过${} 来拼接字符串
      bool bl=false;///布尔类型 与java类似
              ///int 和 double 都是num的子类
      int b=0;///dart中没有long类型 但会根据实际的值得大小 来在不同平台转换成对应的值
              ///例如:如果你写的范围超出了java中的int 在android平台就会自动变成long类型
      double c=0.0;///double和上面类似
      var d="";///如果声明的时候没有赋值,之后可以随便改变类型,但是如果声明的时候赋值了就会直接确定其类型
      dynamic e="";///这个类型会动态确定值得类型,也就是在运行时才会确定类型,声明了可以随意改变类型的,
                  ///如果确定类型的话不建议使用它
    }
    
    final 和const区别

    final 是运行时确定的常量,const是编译时就确定的常量 可以提高效率

    static

    static 和java类似

    List和Map

    和java不同 List和Map不是接口,可以直接使用
    Map和koltin类似通过中括号 赋值
    List获取值也和koltin类似通过中括号获取
    不过提供的api比较丰富

      List<String> list=List();
      list.add("这是第一条");
      Map<String,String> map=Map();
      map["a"]="a";
    
    循环控制语句

    循环: for foreach while do while

    List<String> list=List();///dart可以省略new关键字
      list.add("这是第一条");
      list.add("这是第二条");
      list.add("这是第三条");
      list.add("这是第四条");
      for (var i = 0; i < list.length; ++i) {
        print(list[i]);
      }
      list.forEach((s) {
        print(s);
      });
      int a=0;
      while(a<list.length){
        print(list[a]);
        a++;
      }
     int b=0;
     do{
       print(list[b]);
       b++;
     } while(b<list.length);
    
    操作符
    • 类型转换:as
    • 判断类型:is
    • =、+=、=、*=这些不必多说,还有一个 ??= 操作符用来指定 值为 null 的变量的值
    • 安全操作符:?. 表示这个对象不为null才会执行和koltin一样
    • 三目运算符 :String a=1>2?"a":"b"; 和java一样
    • 级联操作符使用 .. 的范式调用方法可以达到java中建造者的效果
     String a=1>2?"a":"b";
      a..length..toString();
    
    方法

    在dart中方法是不能重载的,但是dart为我们提供了可选位置参数,和可选命名参数两种

    • 可选位置参数,中括号内要赋值就要按照顺序赋值,不能跳过某个参数
    void test(String s,[String a="a”,String b]){///可以在中括号中赋予默认中
    
    }
    
    • 可选命名参数,大括号内的参数可以选择性的赋值
    void test(String s,{int a=0,String c=""}){///可以在大括号中赋予默认中
    
    }
    
    一等方法对象

    在dart 中方法可以代表接口,使用时可以写成匿名方法,例如

    void main(){
      fu((t){
        print(t);
      });
    }
    void fu(void t(String t)){///void t(String t) 这个作用相当于一个接口
      t("你好");
    }
    

    但是这样写感觉看着很乱我们来改一下

    void main(){
      fu((t){
        print(t);
      });
    }
    void fu(Function t){///Function  声明一个方法一个方法
      t("你好");
    }
    

    但是这样我们就看不到需要传递的参数了 这里我们就要借助typedef这个关键字

    void main(){
      fu((t){
        print(t);
      });
    }
    void fu(call_back c){
      c("你好");
    }
    typedef call_back(String t);
    

    这样我们就可以名确定知道需要传递的参数

    异常

    和 Java 不同的是,所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且不要求你捕获任何异常。
    Dart 提供了 Exception和Error 类型, 以及一些子类型。你还 可以定义自己的异常类型。但是, Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者Error 的对象。
    可以捕捉指定类型异常

    try {
        throw 123;
    } on int catch(e){
        //使用 on 指定捕获int类型的异常对象       
    } catch(e,s){
        //函数 catch() 可以带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 ( StackTrace 对象)
        rethrow; //使用 `rethrow` 关键字可以 把捕获的异常给 重新抛出
    } finally{
        
    }
    

    类的创建和使用都和java差不多,但是dart中并没有权限修饰符,只有一个下划线代表私有。首字母是下划线代表这个类、方法、属性不能被其他文件访问,dart是支持反射的,但是flutter中将dart的反射屏蔽掉了,所以在flutter开发中也就不能通过反射来操作。
    构造方法

    class Test {
      Test() {///普通构造方法和java一样 但是不能重载
    
      }
      factory Test(){///工厂构造方法  这里会报错,原因是方法不能重载
        
      }
    }
    

    实现单例有两种方式

    1. 和java一样的做法 输出为true可以知道两次调用的Test.intance是同一个对象
    void main() {
      print(Test.intance().hashCode==Test.intance().hashCode);
    }
    class Test {
     static Test test;
     static intance(){
       return test??=new Test();
     }
    }
    
    1. dart中为我们提供了工厂构造函数,我们可以使用工厂构造函数来实现,输出也为true,我们可以知道我们每一次创建新对象的时候并没有创建 还是第一次创建的对象,实现了单例
    void main() {
      print(Te().hashCode==Te().hashCode);
    }
    class Te {
      int a=0;
      Te._intance(){
        a=1;
      }
      static Te te;
      factory Te(){
        return  te??=Te._intance();
      }
    }
    

    相关文章

      网友评论

          本文标题:dart基础

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