参阅书籍:
《Flutter跨平台开发入门与实践》-- 向治洪(著)
参阅网站:
https://www.dartcn.com/guides/language/language-tour
3. Dart语言
Dart是谷歌公司于2011年10月发布的一门全新的编程语言,已被欧洲计算机制造商协会(European Computer Manufacture Association,ECMA)认定为标准,初期目标是将其用于Web应用、服务器、移动应用和物联网等领域的开发。
Dart在设计之初参考了Java等面向对象的编程语言,因此Dart既有面向对象编程的特性,也有面向函数编程的特性。除了融合Java和JavaScript所长之外,Dart还提供了一些其他具有表现力的语法,如可选命名参数、级联运算符和条件成员访问运算符等。
使用Dart之前,需要先安装Dart SDK。Dart SDK包含了编写和运行Dart代码所需的一切工具,如虚拟机(Virtual Machine,VM)、库、分析器、包管理工具、文档生成器和代码调试等。
搭建开发环境时安装的Flutter SDK里已经包含了Dart SDK。
3.1 编写 Hello World
和大多数编程语言一样,Dart也把main()作为程序的入口。
首先,新建一个名为hello.dart的文件,添加如下代码。
然后在终端执行dart hello.dart命令,在终端可以看到输出了“Hello World!”。
3.2 变量和常量
变量仅存储对象引用。
3.2.1 声明变量
代码语言:javascript复制//用var声明变量,name变量的类型会被推断为String
var name = 'huahua';
//用dynamic声明变量,不限定name变量的类型
dynamic name = 'huahua';
//显示声明变量,限定name变量的类型为String
String name = 'huahua';
注:显示声明的变量必须初始化后才能使用。
3.2.2 默认值
在Dart中,一切皆为对象,未初始化的变量默认值是null。
3.2.3 声明常量
在Dart中,声明使用过程中不会被修改的变量(即常量)可以使用final或const关键字。
final变量的值只能被设置一次,const变量的值在编译时就已经固定。
实例变量可以是final变量,但不能是const变量。
const还可以用来创建常量值,以及声明创建常量值的构造函数。
3.3 内置数据类型
3.3.1 Number
Number有两种类型:int(整型) 和 double(浮点型)。
从 Dart 2.1 开始,必要的时候 int 字面量会自动转换成 double 类型。
字符串和数字相互转换的方法:
代码语言:javascript复制// String -> int
var one = int.parse('1');
// String -> double
var onePointOne = double.parse('1.1');
// int -> String
String oneAsString = 1.toString();
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
3.3.2 String
String是一组UTF-16的单元序列,通过单引号或双引号进行声明。
字符串可以通过 ${expression} 的方式内嵌表达式。如果表达式是一个标识符,则 {} 可以省略。
代码语言:javascript复制var s = 'string interpolation';
print('Dart has $s, which is very handy.');//Dart has string interpolation, which is very handy.
print('That deserves all caps. ' '${s.toUpperCase()} is very handy!');//That deserves all caps. STRING INTERPOLATION is very handy!
使用连续三个单引号或者三个双引号实现多行字符串对象的创建。
使用 r 前缀,可以创建原始raw字符串。
3.3.3 Boolean
Dart使用 bool 类型表示布尔值。Dart只有字面量 true 和 false 是布尔类型,这两个对象都是编译时常量。
3.3.4 List
在Dart中,List表示列表,和数组是同一概念。Dart中的List类型和JavaScript中的Array类型是类似的。
代码语言:javascript复制//通过字面量创建List
var list = [1, 2, 3];
3.3.5 Set
在Dart中Set是一个元素唯一且无序的集合。
代码语言:javascript复制//通过字面量创建Set
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
//创建一个空集
var names = <String>{};
//或Set<String> names = {};
//这样会创建一个Map,而不是Set
var names = {};
3.3.6 Map
通常来说, Map 是用来关联 keys 和 values 的对象。keys 和 values 可以是任何类型的对象。在一个 Map 对象中一个 key 只能出现一次,但是 value 可以出现多次。
代码语言:javascript复制//通过字面量创建Map
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
//通过构造函数创建Map
var gifts = new Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
3.3.7 Rune
在 Dart 中,Rune 用来表示字符串中的 UTF-32 编码字符。
表示 Unicode 编码的常用方法是 uXXXX, 这里 XXXX 是一个4位的16进制数。对于特殊的非 4 个数值的情况,把编码值放到大括号中即可。
代码语言:javascript复制var clapping = 'u{1f44f}';
print(clapping);//