dart基础内容特点记录

一.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基础内容特点记录)