Dart语言支持以下类型 :

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

1. 数字类型

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

  • 整数 – 整数值表示非小数值,即没有小数点的数值。例如,10是整数。使用int关键字表示整数文字。
  • 双精度数 – Dart还支持小数数值,即带小数点的值。Dart中的Double数据类型表示64位(双精度)浮点数。例如,10.10。关键字double用于表示浮点文字。

int 必须是整型

void main() {
  int a = 123;
  a = 45;
  print(a);
}

如果数字包含小数,则为双精度数。

void main() {
  double b = 23.5;
}

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

void main() {
  double b = 23.5;
  b = 24;
  print(b);
}

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.";

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

void main() {
  String str1 = '你好';

  String str2 = 'Dart';

  print("$str1 $str2");
}

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

void main() {
  String str1 = '''this is str1
  this is str1

  this is str1
  ''';

  String str2 = """
    this is str1
    this is str1

    this is str1
    """;
}

3. 布尔类型

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

void main() {
  var flag = true;

  if (flag) {
    print('真');
  } else {
    print('假');
  }
}

4. 列表类型

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

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

var list = [1, 2, 3];

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

void main() {
  var list = [1, 2, 3];
  print(list.length == 3);
  print(list[1] == 2);
  list[1] = 1;
  print(list[1] == 1);
}

第二种定义List的方式

void main() {
  var l2 = new List();

  l2.add('张三');
  l2.add('李四');
  l2.add('王五');

  print(l2);
  print(l2[2]);
}

定义List指定类型

void main() {
  var l3 = new List<String>();

  l3.add('张三');

  // l3.add(123);

  print(l3);
}

要创建一个编译时常量的列表,请在列表文字之前添加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];
print(list2.length == 1);

5. 集合

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

var mybjs = {'mybj123.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('mybj');
elements.addAll(mybjs);

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

var elements = <String>{};
elements.add('mybj');
elements.addAll(mybjs);
print(elements.length == 5);

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

final constantSet = const {
  'mybj',
  'chlorine',
  'bromine',
  'iodine',
  'astatine',
};

6. 映射

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

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

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';

以与在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',
};

7. 符文

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

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

String类有几个属性可用于提取符文信息。codeUnitAtcodeUnit属性返回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)

8. 符号

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

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

#radix
#bar

符号文字是编译时常量。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有资源及文章均来源于网络及用户分享或为本站原创,仅限用于学习和研究,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 04. Dart数据类型

发表评论

IT互联网行业相关广告投放 更专业 更精准

立即查看 联系我们