Dart(一)需要注意的点
转 https://www.jianshu.com/p/73640f27544f
Dart中,一切皆对象,包括变量、数字、函数等
int a = 11;
print(a==11);// true
a = null;
print(a==null);// true
num、int和double
- dart中没有浮点型,int和double字如其面,num声明的变量包含了int和double两种类型。
- 加减乘除的除法“/”,在java中,5/2=2,但是在dart中5/2=2.5,dart中有个特有符号“~/",表示的就是除后取整,跟java中的除法一样,因此 5 ~/ 2 = 2。
- 在java中,int a, 那么a=0;在dart中,int a,那么a=null。
- java中的long,对应dart中的int
三目运算符 ? :
- 在dart中可以使用?:运算符,如:
int a=1;
int b = a>1?3:4;
- 但是还有个 ?? 运算符,如:
int a ;
int b = a ?? 2;// 表示,如果a为空,则返回2
a ??= 2;//表示如果a为空,则将2赋值给a
int a;
print('a=$a');// a = null
int b = a ?? 2;
print('b=$b');// b = 2
a ??= 3;
print('a=$a');// a = 3
Dart中,布尔值 只有true是真 false是假 其他全不合法(与js不一样)。
assert(bool)语句,方便使用
如果bool==true 正常往后执行 否则抛出异常。
int a = 1;
int b = 2;
assert(a>b);//抛异常
变量的作用域
在Dart中,没有类似于java中声明变量作用域的关键字,如public,protected和private。如果一个标识符以下划线_开头,则表示是私有的,否则表示公有的。
Dart是强类型语言
- 可以使用int String等明确类型声明变量,变量只能赋值该类型数据。
- 可以使用var 声明变量,第一次赋值时,dart根据赋值的数据自动推导其类型,比如var age = 1,那么age就是int类型了,就不能在赋值别的类型了,如再age = “12”,那么就报错了。
dynamic与Object的区别
- Dart中,一切皆对象,有对象就必然有类,所有的类(不包括Object自身)都直接或间接继承Object,如果一个类没有明显去extends某一个类,默认继承Object。Object代表的是一个类型,其他所有类都是Object的子孙类,所以可以用Object去接收任何类型对象,Dart在编译期会进行类型检查,父类的引用指向子类的对象,所以没问题。Dart是强类型语言,这是静态语言特性。但是用Object接收的参数,只能调用Object中的属性和函数,超出Object的范围会报错,编译期可以直接类型检查出来。
- dynamic,动态语言的特点之一就是编译期不进行类型检查而是运行时进行类型检查,而Dart又想尽可能兼顾动态语言和静态语言特性,因此dynamic就为此开了口子,使用dynamic声明一个变量时,编译器就不会进行类型检查了,因此也可以用dynamic接收任何类型参数,调用你希望调用的方法,此时编译器不会进行检查,如果确实调用了一个不存在的方法,那么会调用dynamic的noSuchMethod方法。
java中有类型提升功能,dart中没有。
- java中字符串和数字相加,起到链接字符串作用;dart中则不能让字符串与数字相加,比如将数字转为字符串才能相加,其实就是字符串链接。