Dart03数据类型
Dart03数据类型
Dart 语言支持以下类型
- 数字
- 字符串
- 布尔
- 列表(类似于数组)
- 集合
- 映射
- 符文(用于表示字符串中的Unicode字符)
- 符号(Symbol)
数字类型
Dart 中的数字类型有两种类型
- 整数 - 整数值表示非小数值,即没有小数点的数值。例如,10是整数。使用int关键字表示整数文字。
- 双精度数 - Dart 还支持小数数值,即带小数点的值。Dart中的Double数据类型表示64位(双精度)浮点数。例如,10.10。关键字double用于表示浮点文字。
以下是定义整数文字的一些示例:
var x = 123;
var hex = 0xDEADBEEF;
如果数字包含小数,则为双精度数。以下是定义双精度数文字的一些示例:
var y = 1.199;
var exponents = 1.42e5;
从Dart 2.1开始,必要时整数文字会自动转换为双精度数:
double z = 10; // 相当于 double z = 10.0.
以下是将字符串转换为数字的方法,反之亦然:
// String 转为 int
var one = int.parse('1');
print(one == 1);
// String 转为 double
var onePointOne = double.parse('1.1');
print(onePointOne == 1.1);
// int 转为 String
String oneAsString = 1.toString();
print(oneAsString == '1');
// double 转为 String
String piAsString = 3.14159.toStringAsFixed(2);
print(piAsString == '3.14');
String
字符串代表一系列字符。例如,如果要存储一些数据,如名称、地址等,则应使用字符串数据类型。Dart字符串是一系列UTF-16代码单元。符文用于表示UTF-32代码单元序列。
关键字String用于表示字符串文字,字符串值嵌入单引号或双引号中。因此可以使用单引号或双引号来创建字符串:
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
可以使用${expression}将表达式的值放在字符串中。如果表达式是标识符,则可以跳过{}。
var s = 'string interpolation';
print('Dart has $s, which is very handy.');
可以使用相邻的字符串文字或+
运算符来连接字符串:
var s2 = 'The + operator ' + 'works, as well.';
print(s2 == 'The + operator works, as well.');
使用带有单引号或双引号的三引号创建多行字符串:
var s1 = '''
You can create
multi-line strings like this one.
''';
print(s1);
var s2 = """This is also a
multi-line string.""";
print(s2);
bool
要表示布尔值,可使用Dart中的 bool 类型。只有两个对象具有bool类型:boolean 文字:true和false,它们都是编译时常量。
// 检查空字符串。
var fullName = '';
print(fullName.isEmpty);
// 检查零值。
var hitPoints = 0;
print(hitPoints <= 0);
// 检查是否为null。
var unicorn;
print(unicorn == null);
// 检查NaN。
var iMeantToDoThis = 0 / 0;
print(iMeantToDoThis.isNaN);
List
在Dart中,数组是List对象,因此大多数人将它称为列表。
var list = [1, 2, 3];
列表使用从0开始的索引,其中0是第一个元素的索引,list.length-1是最后一个元素的索引。可以获得列表的长度并像在JavaScript中一样引用列表元素:
var list = [1, 2, 3];
print(list.length == 3);
print(list[1] == 2);
list[1] = 1;
print(list[1] == 1);
要创建一个编译时常量的列表,请在列表文字之前添加 const:
var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.
Dart 2.3 引入了扩展运算符(...)和空值感知扩展运算符(...?),它提供了一种将多个元素插入集合的简洁方法。
例如,使用扩展运算符(...)将列表的所有元素插入另一个列表:
var list = [1, 2, 3];
var list2 = [0, ...list];
print(list2.length == 4);
如果扩展运算符右侧的表达式可能为null,则可以通过使用支持null的扩展运算符(...?)来避免异常:
var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
Dart 2.3还引入了 if 和 collection 的集合,使用它在 if 条件和 for 循环构建集合。
下面是一个使用集合的示例,如果要创建一个包含三个或四个项目的列表:
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
这是一个使用集合来操作列表项目,然后将它们添加到另一个列表之前的示例:
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
print(listOfStrings);
Set
Dart 中的 Set 是无序的唯一项的集合。
var halogens = {'yiibai.com', 'chlorine', 'bromine', 'iodine', 'astatine'};
要创建一个空集合,请使用前面带有类型参数的{},或者将{}赋给类型为Set的变量:
var names = <String>{};
Set<String> names = {}; // This works, too.
//var names = {}; // Creates a map, not a set.
使用add()或addAll()方法将项添加到现有集合:
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
使用.length来获取集合中的项目数量:
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);
要创建一个编译时常量的集合,请在set文字之前添加const:
final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
// constantSet.add('helium'); // Uncommenting this causes an error.
Map
通常映射是关联键和值的对象。键和值都可以是任何类型的对象。每个键只出现一次,但可以多次使用相同的值。
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
可以使用Map构造函数创建对象:
var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
像在JavaScript中一样,将新的键值对添加到现有映射:
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair
以与在JavaScript中相同的方式从映射中检索值:
var gifts = {'first': 'partridge'};
print(gifts['first'] == 'partridge');
如果查找不在映射中的键,则将返回null:
var gifts = {'first': 'partridge'};
print(gifts['fifth'] == null);
使用.length来获取映射中键值对的数量:
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
print(gifts.length == 2);
要创建一个编译时常量的映射,请在map文字之前添加const关键字:
final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
// constantMap[2] = 'Helium'; // Uncommenting this causes an error.
Rune
在 Dart 中, Rune 用来表示字符串中的 UTF-32 编码字符。
Unicode 定义了一个全球的书写系统编码, 系统中使用的所有字母,数字和符号都对应唯一的数值编码。 由于 Dart 字符串是一系列 UTF-16 编码单元, 因此要在字符串中表示32位 Unicode 值需要特殊语法支持。
表示 Unicode 编码的常用方法是, \uXXXX, 这里 XXXX 是一个4位的16进制数。 例如,心形符号 (♥) 是 \u2665。 对于特殊的非 4 个数值的情况, 把编码值放到大括号中即可。 例如,emoji 的笑脸 (�) 是 \u{1f600}。
var clapping = '\u{1f44f}';
print(clapping);
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));