数字(Numbers)
从上图可以看出Dart中的数字类型为num,继承自Object,然后又派生出了int和double两个具体类型。
- int:其取值范围不大于64位的整数值,取决于平台。
- double:64位双精度浮点数,由IEEE 754标准制定。
var num1= 1;
var num2= 1.5;
int num3 =1;
double num4 = 1.5;
字符串(String)
Dart字符串(string对象)包含一个UTF-16代码单元序列。您可以使用单引号或双引号来创建字符串。
var s1 = 'Single quotes.';
var s2 = "Double quotes.";
String s3 = "Hello world";
可以使用var或者String来定义一个字符串。
可以使用${expression}将表达式的值放在字符串中
String s = "world";
print("hello ${s}");
可以使用相邻的字符串字面值或+操作符连接字符串
String s1 = "hello";
String s2 = "world"
String s3 = s1+ s2;
创建多行字符串:使用带单引号或双引号的三引号
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";
布尔(bool)
为了表示布尔值,Dart有一个名为bool的类型。只有两个对象具有bool类型:布尔值true和false,它们都是编译时常量。
bool a = true;
var b = false;
列表(List)-类似数组
在Dart中,数组是List对象。
Dart列表由逗号分隔的表达式或值列表表示,该列表用方括号([])括起来。以下是一个简单的Dart列表:
var list = [1, 2, 3];
列表使用从0开始的索引,其中0是第一个元素的索引,list.length-1是最后一个元素的索引。
数组的常见操作如下:
//定义一个数组
var list = [1, 2, 3];
//数组长度
assert(list.length == 3);
//取数组中某个值
assert(list[1] == 2);
//为数组某个元素重新赋值
list[1] = 1;
assert(list[1] == 1);
Dart 2.3引入了扩展操作符(…)和支持空值的扩展操作符(…?),它们提供了一种简洁的方式将多个值插入到集合中。
例如,你可以使用扩展操作符(…)将一个列表的所有值插入到另一个列表中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
如果扩展操作符右边的表达式可能为空,你可以使用一个能感知空值的扩散操作符(…?)来避免异常:
var list2 = [0, ...?list];
assert(list2.length == 1);
Dart还提供了if集合和for集合,您可以使用它们来使用条件(if)和重复(for)构建集合。
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');
集合(Set)
Dart中的Set是无序的唯一项的集合。Dart支持由Set文字和Set类型提供的集合。下是一个简单的Dart集,使用set文字创建:
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
创建一个空set:
var names = <String>{};
Set<String> names = {}; // This works, too.
//var names = {}; // Creates a map, not a set.
set 还是 map? map语法类似于set的语法。因为map字面值先出现,{}默认为map类型。如果您忘记了给{}添加类型或者赋值,则Dart创建一个类型为Map<dynamic, dynamic>的对象。
集合的常见操作如下:
var elements = <String>{};
//添加一个.add()
elements.add('fluorine');
//添加一系列.addAll()
elements.addAll(halogens);
//通过.length获取长度
assert(elements.length == 5);
字典(Map)
map是一个关联键和值的对象。键和值都可以是任何类型的对象。每个键只出现一次,但可以多次使用相同的值。
用于常见Map对象创建如下:
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
Dart 可以推断出gifts 的类型为 Map<String, String> ,nobleGases的类型为 Map<int, String>. 如果我们往对应的map中添加一个错误的类型, 运行就会报错。
使用Map构造函数来创建相同的对象如下:
var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
使用下标赋值操作符([]=)向现有映射添加一个新的键值对:
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair
使用下标操作符([])从映射中检索值:
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
字典也跟列表一样,支持扩展操作符(... 和 ...?) 以及 集合操作的if 和 for。
符文(Runes)-用于表示字符串中的Unicode字符
在Dart中,符文是字符串的UTF-32字符集。
Unicode为世界上所有书写系统中使用的每个字母,数字和符号定义唯一的数值。由于Dart字符串是UTF-16代码单元的序列,因此在字符串中表示32位Unicode值需要特殊语法。
Unicode编码点的通常表达方式是\uXXXX,其中XXXX是4位十六进制值。
var clapping ='\u{1f44f}' ;
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());
Runes input = new Runes( '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharcodes(intput))
结果如下:
符号(Symbol)
Symbol对象表示在Dart程序中声明的操作符或标识符。开发中可能永远不需要使用Symbol,但对于按名称引用标识符的api来说非常有用,因为缩小会更改标识符名称而不会更改标识符符号。要获取标识符的符号,请使用符号文字,它只是#后跟标识符:
#radix
#bar