CoderMrWu

生活诚可期,爱情价更高!

Dart数据类型

一、数字

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

1、初始化

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

int num = 10;

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

double d = 10.0;
2、字符数字相互转换

使用 parse() 方法和 toString() 方法来实现

 // 字符串转数字
int n = int.parse('123');
double d = double.parse('112.34');
print(n);
print(d);

// 数字转字符串
String s1 = n.toString();
String s2 = d.toString();
print(s1);
print(s2);
3、int 类型实现移位操作

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

var i1 = 3<<1; // 左移 : 0011 << 1 = 0110 = 6
var i2 = 3>>1; // 右移 : 0011 >> 1 = 0001 = 0
var i3 = 3|4; // 或运算(同0为0,不同为1): 0011 | 0100 == 0111 = 7
var i4 = 3&4; // 与运算(同1为1,不同为0): 0011 & 0100 == 0000 = 0

print(i1);
print(i2);
print(i3);
print(i4);

二、字符串

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

1、初始化

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

 var s1 = 'HelloWorld!';
var s2 = "HelloWorld!";
String s3 = 'HelloWorld';
String s4 = "HelloWorld!";
print(s1);
print(s2);
print(s3);
print(s4);
2、字符串模板的使用

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

var s5 = "Hello${12+25}World!";
print(s5); // 打印结果: Hello37World!

int n1 = 120;
var s6 = "100+20=${n1}==100+20=$n1";
print(s6); // 打印结果: 100+20=120==100+20=120
3、字符串的拼接

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

 var s7 = "Hello";
var s8 = "World!";
s8 = s7+s8; 
print(s8); // 打印结果: HelloWorld!
4、多行字符串的创建

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

var s9 = '''
How Are You?
I am Fine,Thinks,And you?
Oh! Me To!
''';

var s10 = """
How Are You?
I am Fine,Thinks,And you?
Oh! Me To!
""";

print(s9);
print(s10);
5、创建原始字符串

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

 var s11 = "hello\nworld!";
var s12 = r"hello\nworld!";
print(s11); // \n 会转换成换行符
print(s12); // \n 会原样输出
6、文字字符串是编译时常量

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

// const 常量
const num1 = 123;
const str1 = 'Hello';
const bool1 = true;
const const1 = '$num1 $str1 $bool1'; 
String str = '$num1 $str1 $bool1';
print(const1);
print(str);

// 变量
int num2 = 110;
String str2 = 'World!';
bool b2 = false;
// const const2 = '$num2 $str2 $b2'; 编译报错
String str3 = '$num2 $str2 $b2';
print(str3);

三、布尔类型

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

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

var fullName = '';
// 判断字符串是否为空
print(fullName.isEmpty);// 打印结果:true

// 判断零值
var num = 0;
print(num == 0 && num <= 0);// 打印结果:true

// 判断是否为空
var obj;
print(obj == null);// 打印结果:true

// 检测NaN
var na = 0/0;
print(na.isNaN);// 打印结果:true

四、列表类型

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

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

var list= [1,2,3];
1、length 属性

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

 var list = [1,2,3];
print(list.length); // 打印数组的长度
2、编译时常量列表

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

 // 编译时常量列表: 常量,不可改变的变量
var constList = const[1,2,3]; 
// constList[0] = 2; // 修改列表中的值会报错;
3、扩展运算符(…)

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

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

 var list1 = [1,2,3];
// 把list1 插入到 list2中
var list2 = [0,...list1]; 
print(list2);

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

 var list3;
// var list4 = [0,...list3]; // 导致异常
var list4 = [0,...?list3];
print(list4);

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

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

 bool b = false;
var list5 = [
"1",
"2",
"3",
if(b)'4'
];
// 如果 b = true ,打印结果是[1,2,3,4]
// 如果 b = false, 打印结果是 [1,2,3]
print(list5);

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

 var list6 = [1,2,3,4,5];
var list5 = [
"1",
"2",
"3",
for(var i in list6) '$i'
];
print(list5); // 打印结果: [1, 2, 3, 1, 2, 3, 4, 5]

五、集合

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

var sets = {'a','b','c','d'};
1、创建并初始化

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

// 方法一
var set1 = <String>{};

// 方法二
Set<String> set2 = {};

// 注意:这样初始化的不是一个Set,而是一个Map 
var map1 = {};
2、添加数据

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

 // 方法一
var set1 = <String>{};
// 方法二
Set<String> set2 = {'b','c','d'};
// 添加单个
set1.add("a");
// 添加多个
set1.addAll(set2);
print(set1); // 打印结果: {a, b, c, d}
3、length 属性

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

Set<String> set2 = {'b','c','d'};

print(set2.length); // 打印结果: 3
4、编译时常量的集合

在set文字之前添加const

 Set<String> set2 = const{'b','c','d'};

六、映射

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

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

var map1 = {
'1':'one',
'2':'two'
};

print(map1); // 打印结果: {1: one, 2: two}
1、创建并初始化
 // 创建空的映射
var map1 = {};
// 创建并初始化值
Map map2 = {1:'one',2:'two'};
print(map2); // 打印结果: {1: one, 2: two}
2、添加、修改和获取映射的值
 // 创建并初始化值
Map map2 = {1:'one',2:'two'};
// 添加值
map2[3] = "three";
// 修改值
map2[2] = "four";
// 获取值
print(map2[1]); // 打印结果: one
3、length属性
 print(map2.length); // 打印结果: 3
4、编译时常量的映射
 // 使用 const 关键字
Map map2 = const {1:'one',2:'two'};

七、符文

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

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

String类有几个属性可用于提取符文信息。codeUnitAtcodeUnit属性返回16位代码单元。使用runes属性获取字符串的符文。

以下示例说明了符文,16位代码单元和32位代码点之间的关系。

var s1 = "HelloWorld!";
print(s1.codeUnits);
print(s1.runes.toList());

Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));

八、符号

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

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

#radix
#bar

符号文字是编译时常量。

点赞