Dart数据类型

编程语言最基本的特征之一就是它支持的数据类型。这些是可以用编程语言表示和操作的值的类型。

Dart语言支持以下类型 -

  • 数字
  • 字符串
  • 布尔
  • 列表(类似于数组)
  • 集合
  • 映射
  • 符文(用于表示字符串中的Unicode字符)
  • 符号

1. 数字类型

Dart中的数字类型用于表示数字文字。Dart中的数字类型有两种类型 -

  • 整数 - 整数值表示非小数值,即没有小数点的数值。例如,10是整数。使用int关键字表示整数文字。

  • 双精度数 - Dart还支持小数数值,即带小数点的值。Dart中的Double数据类型表示64位(双精度)浮点数。例如,10.10。关键字double用于表示浮点文字。

整数是没有小数点的数字。以下是定义整数文字的一些示例:

var x = 123; var hex = 0xDEADBEEF; 
Dart

如果数字包含小数,则为双精度数。以下是定义双精度数文字的一些示例:

var y = 1.199; var exponents = 1.42e5; 
Dart

从Dart 2.1开始,必要时整数文字会自动转换为双精度数:

double z = 10; // 相当于 double z = 10.0. 
Dart

以下是将字符串转换为数字的方法,反之亦然:

// String 转为 int var one = int.parse('1'); assert(one == 1);  // String 转为 double var onePointOne = double.parse('1.1'); assert(onePointOne == 1.1);  // int 转为 String String oneAsString = 1.toString(); assert(oneAsString == '1');  // double 转为 String String piAsString = 3.14159.toStringAsFixed(2); assert(piAsString == '3.14'); 
Dart

int类型指定传统的按位移位(<<,>>),AND(&)和OR(|)运算符。例如:

assert((3 << 1) == 6); // 0011 << 1 == 0110 assert((3 >> 1) == 1); // 0011 >> 1 == 0001 assert((3 | 4) == 7); // 0011 | 0100 == 0111 
Dart

文字数字是编译时常量。许多算术表达式也是编译时常量,只要它们的操作数是编译为数字的编译时常量。

const msPerSecond = 1000; const secondsUntilRetry = 5; const msUntilRetry = secondsUntilRetry * msPerSecond; 
Dart

2. 字符串

字符串代表一系列字符。例如,如果要存储一些数据,如名称,地址等,则应使用字符串数据类型。Dart字符串是一系列UTF-16代码单元。符文用于表示UTF-32代码单元序列。

关键字String用于表示字符串文字,字符串值嵌入单引号或双引号中。因此可以使用单引号或双引号来创建字符串:

var s1 = 'Single quotes work well for string literals.'; var s2 = "Double quotes work just as well."; var s3 = 'It\'s easy to escape the string delimiter.'; var s4 = "It's even easier to use the other delimiter."; 
Dart

可以使用${expression}将表达式的值放在字符串中。如果表达式是标识符,则可以跳过{}。为了获得对应于对象的字符串,Dart调用对象的toString()方法。

var s = 'string interpolation';  assert('Dart has $s, which is very handy.' ==     'Dart has string interpolation, ' +         'which is very handy.'); assert('That deserves all caps. ' +         '${s.toUpperCase()} is very handy!' ==     'That deserves all caps. ' +         'STRING INTERPOLATION is very handy!'); 
Dart

可以使用相邻的字符串文字或+运算符来连接字符串:

var s1 = 'String '     'concatenation'     " works even over line breaks."; assert(s1 ==     'String concatenation works even over '         'line breaks.');  var s2 = 'The + operator ' + 'works, as well.'; assert(s2 == 'The + operator works, as well.'); 
Dart

使用带有单引号或双引号的三引号创建多行字符串:

var s1 = ''' You can create multi-line strings like this one. ''';  var s2 = """This is also a multi-line string."""; 
Dart

可以通过在前面加上r来创建“原始”字符串:

var s = r'In a raw string, not even \n gets special treatment.'; 
Dart

文字字符串是编译时常量,只要任何插值表达式是一个编译时常量,其值为null或数值,字符串或布尔值都可以。

// 在 const 字符串中。 const aConstNum = 0; const aConstBool = true; const aConstString = 'a constant string';  // 不在 const 字符串中。 var aNum = 0; var aBool = true; var aString = 'a string'; const aConstList = [1, 2, 3];  const validConstString = '$aConstNum $aConstBool $aConstString'; // const invalidConstString = '$aNum $aBool $aString $aConstList'; 
Dart

3. 布尔类型

要表示布尔值,可使用Dart中的bool类型。只有两个对象具有bool类型:boolean 文字:true和false,它们都是编译时常量。

Dart的类型安全不能使用if(nonbooleanValue)或assert(nonbooleanValue)之类的代码。需要明确检查值,如下所示:

// 检查空字符串。 var fullName = ''; assert(fullName.isEmpty);  // 检查零值。 var hitPoints = 0; assert(hitPoints <= 0);  // 检查是否为null。 var unicorn; assert(unicorn == null);  // 检查NaN。 var iMeantToDoThis = 0 / 0; assert(iMeantToDoThis.isNaN); 
Dart

4. 列表类型

几乎每种编程语言中最常见的集合是数组或有序的对象组。在Dart中,数组是List对象,因此大多数人将它称为列表。

Dart列表文字看起来像JavaScript数组文字。下面是一个简单的Dart列表:

var list = [1, 2, 3]; 
Dart

列表使用从0开始的索引,其中0是第一个元素的索引,list.length-1是最后一个元素的索引。可以获得列表的长度并像在JavaScript中一样引用列表元素:

var list = [1, 2, 3]; assert(list.length == 3); assert(list[1] == 2);  list[1] = 1; assert(list[1] == 1); 
Dart

要创建一个编译时常量的列表,请在列表文字之前添加const:

var constantList = const [1, 2, 3]; // constantList[1] = 1; // Uncommenting this causes an error. 
Dart

Dart 2.3引入了扩展运算符(...)和空值感知扩展运算符(...?),它提供了一种将多个元素插入集合的简洁方法。

例如,使用扩展运算符(...)将列表的所有元素插入另一个列表:

var list = [1, 2, 3]; var list2 = [0, ...list]; assert(list2.length == 4); 
Dart

如果扩展运算符右侧的表达式可能为null,则可以通过使用支持null的扩展运算符(...?)来避免异常:

var list; var list2 = [0, ...?list]; assert(list2.length == 1); 
Dart

Dart 2.3还引入了if和collection的集合,使用它在条件(if)和重复(for)构建集合。

下面是一个使用集合的示例,如果要创建一个包含三个或四个项目的列表:

var nav = [   'Home',   'Furniture',   'Plants',   if (promoActive) 'Outlet' ]; 
Dart

这是一个使用集合来操作列表项目,然后将它们添加到另一个列表之前的示例:

var listOfInts = [1, 2, 3]; var listOfStrings = [   '#0',   for (var i in listOfInts) '#$i' ]; assert(listOfStrings[1] == '#1'); 
Dart

5. 集合

Dart中的Set是无序的唯一项的集合。Dart支持由Set文字和Set类型提供的集合。下是一个简单的Dart集,使用set文字创建:

var halogens = {'yiibai.com', 'chlorine', 'bromine', 'iodine', 'astatine'}; 
Dart

要创建一个空集合,请使用前面带有类型参数的{},或者将{}赋给类型为Set的变量:

var names = <String>{}; Set<String> names = {}; // This works, too. //var names = {}; // Creates a map, not a set. 
Dart

使用add()或addAll()方法将项添加到现有集合:

var elements = <String>{}; elements.add('fluorine'); elements.addAll(halogens); 
Dart

使用.length来获取集合中的项目数量:

var elements = <String>{}; elements.add('fluorine'); elements.addAll(halogens); assert(elements.length == 5); 
Dart

要创建一个编译时常量的集合,请在set文字之前添加const:

final constantSet = const {   'fluorine',   'chlorine',   'bromine',   'iodine',   'astatine', }; // constantSet.add('helium'); // Uncommenting this causes an error. 
Dart

6. 映射

通常映射是关联键和值的对象。键和值都可以是任何类型的对象。每个键只出现一次,但可以多次使用相同的值。Dart支持由映射文字和Map类型提供的映射。

下面是几个简单的Dart映射,使用映射文字创建:

var gifts = {   // Key:    Value   'first': 'partridge',   'second': 'turtledoves',   'fifth': 'golden rings' };  var nobleGases = {   2: 'helium',   10: 'neon',   18: 'argon', }; 
Dart

可以使用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'; 
Dart

像在JavaScript中一样,将新的键值对添加到现有映射:

var gifts = {'first': 'partridge'}; gifts['fourth'] = 'calling birds'; // Add a key-value pair 
Dart

以与在JavaScript中相同的方式从映射中检索值:

var gifts = {'first': 'partridge'}; assert(gifts['first'] == 'partridge'); 
Dart

如果查找不在映射中的键,则将返回null:

var gifts = {'first': 'partridge'}; assert(gifts['fifth'] == null); 
Dart

使用.length来获取映射中键值对的数量:

var gifts = {'first': 'partridge'}; gifts['fourth'] = 'calling birds'; assert(gifts.length == 2); 
Dart

要创建一个编译时常量的映射,请在map文字之前添加const关键字:

final constantMap = const {   2: 'helium',   10: 'neon',   18: 'argon', };  // constantMap[2] = 'Helium'; // Uncommenting this causes an error. 
Dart

7. 符文

在Dart中,符文是字符串的UTF-32代码点。

Unicode为世界上所有书写系统中使用的每个字母,数字和符号定义唯一的数值。由于Dart字符串是UTF-16代码单元的序列,因此在字符串中表示32位Unicode值需要特殊语法。

String类有几个属性可用于提取符文信息。codeUnitAt和codeUnit属性返回16位代码单元。使用runes属性获取字符串的符文。
以下示例说明了符文,16位代码单元和32位代码点之间的关系。

   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 
Dart

8. 符号

Symbol对象表示Dart程序中声明的运算符或标识符。可能永远不需要使用符号,但它们对于按名称引用标识符的API非常有用,因为缩小会更改标识符名称而不会更改标识符符号。

要获取标识符的符号,请使用符号文字,它只是#后跟标识符:

#radix #bar 
Dart

符号文字是编译时常量。

原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/article/detail/31190
posted @ 2019-06-02 10:45  Core2Linux  阅读(241)  评论(0)    收藏  举报