Flutter_03_Dart基础知识

Flutter、Golang、Python、编译原理、算法、Chrome原理学习系列文章抢先看请关注【码农帮派】:

 

Dart要求程序从main函数入口执行,main.dart文件:

1void main() { 2

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内部是通过内置运算符+实现的;

  • 多行字符串的构建,可以使用三个单引号/三个双引号的方式声明;

1var s = """This is a 2

 

List和Map

 

常量定义

Dart中定义常量可以使用const和final:

  • const:表示变量在编译期间既要确定的值;

  • final:final定义的变量可以在运行时确定值,但一旦确认之后就不可再变。

1const name = 'mxd'; 2

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

代码交流 2021