美文网首页
dart基础内容特点记录

dart基础内容特点记录

作者: 太sun阳 | 来源:发表于2019-06-24 17:42 被阅读0次

    一.var、Object 和dynamic 关键字的区别

    1.var是一种语法不是一个类型,声明的变量会被反推其具体的类型,所以该变量可以使用所有对应具体类型的方法,类型确定后不可变,比如var name="张三" ;      name=2;就会报错,

    2.Object 和dynamic都是一种类型,都可以在确定类型之后更改变量的类型,比如dynamic name=2;      name="张三" ; 是可以的,但无法使用最后类型的方法,比如想调用name.substring()是会报错的,因为dynamic类型没有该方法

    3.dynamic是运行时确定实际类型,比如dynamic name="aaa"; name++;编译通过,运行时会报错

    总结:var最常用,使用Object 和dynamic需要小心,很多问题编译时无法发现,运行时会报错,类型不确定且是单一类型使用var,若类型不限于单一类型使用Object 或dynamic

    二.const和final的区别

    1.final修饰的变量初始化后不可再被赋值,若变量是基本类型则值不可修改,若变量是引用则该引用不能重新赋值改变引用地址,修饰类则该类不能被继承,修饰方法不能被重写.

    2.const定义常量,编译时就需要确定其值

    注:final和const都不能和var一起使用

    总结:const比final更严格,final编译时可以不确定其值,比如final int f=func();可以   const int c=func();则不行

    在flutter的hot reload时,修改const修改的初始值正常反馈,但是修改final的初始化值必须重启才可以,因为final修饰的被视为状态不会改变,const的字段被视为别名.

    三.特殊运算符

    1. ?.  : Test?.funs从表达式Test中选择属性funs,除非Test为空(当Test为空时,Test?.funs的值为空)

    2. ?? : expr1 ?? expr2 表示如果expr1非空,则返回其值; 否则返回expr2的值

    3. ~/ : 整除,结果抹掉小数取整数

    4. as : (a as b).method();  相当于  if(a is b){ a.method() };

    四.dart标记

    1.跳出代码块:  可以标记一块代码块,当代码块内的逻辑需要跳出时可以使用break 标记

    例:    void test(String a){

    void tests(String a){

    error:{

    if(a==null)break error;

        print("若a为null则该处不会执行");

      }

    print("只要该处之前没有return,不管a是不是null都会执行");

    }

    五.类与函数

    1.隐式接口: 每个类都隐式定义了一个接口,包含该类的所有变量和方法.

    当创建了任何一个类A,其他类B可以直接使用implements该类的名称,如B implements A,此时B需要重写A的所有变量和方法否则会报错,此时implements 的A就是定义类A隐式创建的接口.

    2.call()方法:一个类定义了call()之后,允许像函数一样调用类.

    例:class TestClass{

    call(int a,int b)=>print(a+b);

    }

    TestClass test=TestClass();

    print(test(1,200));

    相关文章

      网友评论

          本文标题:dart基础内容特点记录

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