Flutter学习(三)Dart符号
运算符,优先级从上到下

类成员变量定义:
1) int a; //编译报错,不加?修饰的变量不可为空,必须先初始化,或者用late修饰
2) int? a; //a是空或者整数,使用时需要判空。不判空使用需要加!,否则编译错误,
例如if(a! > 0),此时如果a为空则抛错,需要try catch处理,否则后面代码不执行
3) int a=0;//正确,可以重新赋值
4) late int a; //需要先赋值再使用,否则或抛错
5) final int a = 0; //final表示赋值一次,再次赋值会编译报错,
6) final int a;//必须在构造函数中赋值,否则编译报错
7) late final int a = 0;//懒加载定义方式,系统在使用该变量时才进行赋值。late final修饰的变量可以使用this初始化,只有final修饰的变量不可使用this。再次赋值编译报错
8) late final int a;//可以编译通过,需要先赋值再使用,否则或抛错。赋值多次编译不会报错,但是运行会报错。不推荐这种定义方式,请使用上一种方式来定义
函数变量定义:
函数中定义的变量可以直接用int a;处理和java差不多,使用时没赋值,编译器会提醒
运算符
1) a??b // 如果a不为空,返回a,否则返回b
2) a??=b // 如果a为空,则赋值a=b,否则不处理
3) ?. // 定义String? s;的情况,s?.length, 如果s为空,则返回空,否则返回s.length
4) !. // 定义String? s;的情况,s!.length, 如果s为空,则抛错,否则返回s.length
5) factory 定义构造函数,可以返回一个已存在变量
6) mixin 定义一个混入类,class A extends B with C,C为混入类