Flutter、Golang、Python、编译原理、算法、Chrome原理学习系列文章抢先看请关注【码农帮派】:
Dart要求程序从main函数入口执行,main.dart文件:
void main() {
// Dart代码执行的入口
}
Dart的变量和类型
-
Dart中可以使用var或者具体的变量类型来声明一个变量,使用var定义变量时,表示交由编译器推断决定变量类型。
-
默认情况下未初始化的变量的值都是null。
-
Dart是类型安全的语言,所有类型都是对象类型,都继承自顶层Object类型,因此一些变量都是类型实例,甚至数字、Bool类型、函数和null也都是Object。
num、bool与String
(1)num类型:Dart中数值类型num只有两种子类:64位的int 和 IEEE754标准的64位double,前者是整数类型,后者是浮点类型;
(2)bool类型:在Dart中只有两个对象具有bool类型:true和false,它们都是编译时常量;
(3)String类型:
-
Dart中的String是由UTF-16的字符串组成的;
-
常见字符串的拼接,Dart内部是通过内置运算符+实现的;
-
多行字符串的构建,可以使用三个单引号/三个双引号的方式声明;
var s = """This is a
multi-line string.""";
List和Map
常量定义
Dart中定义常量可以使用const和final:
-
const:表示变量在编译期间既要确定的值;
-
final:final定义的变量可以在运行时确定值,但一旦确认之后就不可再变。
const name = 'mxd';
final cnt = 10; // final可以在运行的时候确定值
var x = 10;
var y = 101;
final ratio = x / y;
const适用于定义编译常量的场景,final适用于定义运行时才可以确定的常量。
函数
在Dart中所有类型都是对象类型,函数也是对象,函数的类型叫做Function,这意味着函数也可以被定义为变量,甚至可以被定义为参数传递给另外一个函数。
上面的函数可以简写:
函数重载
C++和Java中提供了函数重载,即提供同名但参数不同(一般参数个数不同)的函数。在Dart中认为重载函数会造成混乱,因此Dart不支持函数重载,而是提供了可选命名参事和可选参数。具体的做法:
-
给参数增加{},以paramName: value的方式指定调用参数,即可选命名参数;
-
给参数增加[],意味着该参数可以忽略,即可选参数;
类
【注意】Dart中没有public、protected、private关键字,在声明变量和方法的时候,前面带_的即是private权限,如果不带_则默认为public权限。
有时候类的实例化需要根据参数提供多种初始化的方式,可以使用可选命名参数和可选参数的方式,同时Dart提供了命名构造函数的方式:
复用
Dart可以实现类继承以及类接口:
-
继承父类意味着,子类由父类派生,会自动获取父类的成员变量和方法实现,子类可以根据需要覆写构造函数及父类方法;
-
接口实现意味着,子类获取到的仅仅是接口的成员变量符号和方法符号,需要重写实现成员变量以及方法声明和初始化。
【注意】
Coordinate采用接口实现的方法,仅仅是获得了父类Point的一个“空壳子“,只能从语义层面继承Point的变量符号和方法符号,但不能复用Point的原有方法
混入(Mixin)
Dart中,为了解决子类继承多个父类造成的继承歧义,Dart提供了一种机制来实现复用,即“混入“。混入使用with完成。
【说明】继承歧义:也叫菱形问题,是支持多继承的编程语言中一个相当棘手的问题。当 B 类和 C 类继承自 A 类,而 D 类继承自 B 类和 C 类时会产生歧义。如果 A 中有一个方法在 B 和 C 中已经覆写,而 D 没有覆写它,那么 D 继承的方法的版本是 B 类,还是 C 类的呢?
运算符
Dart中多了一些额外的运算符,用于简化处理变量实例缺失(即null)的情况:
-
?. 运算符:假设Point类有成员方法printInfo,p是Point的实例,但p有可能为null,那么为了安全调用p的printInfo方法,可以:
p?.printInfo(); // 当p为null的时候跳过调用,避免抛出异常
-
??= 运算符:如果变量a为null,则给a赋值value,否则跳过:
a ??= value; // a为null的时候才会把value的值赋给a
-
?? 运算符:如果a不为null,返回a的值,否则返回b的值,类型Java中的三元表达式:
a ?? b; // a不为null,返回a的值;a为null,返回b的值
在Dart中,一切都是对象,运算符也是对象成员函数的一部分,Dart提供了类似C++的运算符覆写机制,使得我们可以覆写/自定义对象的运算符:
上图中覆写了Point的减和相等运算符,使用Dart关键字operator。operator与运算符一起使用,表示一个类成员运算函数。在理解时,我们应该把operator和运算符作为一个整体,看作是对象的一个成员函数名。
本节优质资源下载:
Flutter_02_原理概述:
链接:https://pan.baidu.com/s/1o0MDYCmfY3xamo3b6VtZfA 密码:web1
Flutter_03_Dart基础知识:
链接:https://pan.baidu.com/s/1HD9Ueeck7QTY33UAaDZ7TQ 密码:p344