Dart中的数字类型用于表示数字文字。Dart中的数字类型有两种类型。
– 整数值表示非小数值,即没有小数点的数值。例如,10
是整数。使用int
关键字表示整数文字。
int num = 10;
– Dart还支持小数数值,即带小数点的值。Dart中的Double数据类型表示64位(双精度)浮点数。例如,10.10
。关键字double
用于表示浮点文字。
double d = 10.0;
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);
<<
,>>
),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);
UTF-16
代码单元。符文用于表示UTF-32
代码单元序列。
String
用于表示字符串文字,字符串值嵌入单引号或双引号中。因此可以使用单引号或双引号来创建字符串:
var s1 = 'HelloWorld!'; var s2 = "HelloWorld!"; String s3 = 'HelloWorld'; String s4 = "HelloWorld!"; print(s1); print(s2); print(s3); print(s4);
${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
+
运算符来连接字符串:
var s7 = "Hello"; var s8 = "World!"; s8 = s7+s8; print(s8); // 打印结果: HelloWorld!
使用带有单引号或双引号的三引号创建多行字符串:
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);
r
来创建“原始”字符串:
var s11 = "hello\nworld!"; var s12 = r"hello\nworld!"; print(s11); // \n 会转换成换行符 print(s12); // \n 会原样输出
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 文字:true
和false
,它们都是编译时常量。
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];
0
开始的索引,其中0
是第一个元素的索引,list.length-1
是最后一个元素的索引。可以获得列表的长度并像在JavaScript中一样引用列表元素。
var list = [1,2,3]; print(list.length); // 打印数组的长度
const
:
// 编译时常量列表: 常量,不可改变的变量 var constList = const[1,2,3]; // constList[0] = 2; // 修改列表中的值会报错;
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还引入了if
和collection
的集合,使用它在条件(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'};
{}
,或者将{}
赋给类型为Set
的变量:
// 方法一 var set1 = <String>{}; // 方法二 Set<String> set2 = {}; // 注意:这样初始化的不是一个Set,而是一个Map var map1 = {};
add()
或addAll()
方法将项添加到现有集合:
// 方法一 var set1 = <String>{}; // 方法二 Set<String> set2 = {'b','c','d'}; // 添加单个 set1.add("a"); // 添加多个 set1.addAll(set2); print(set1); // 打印结果: {a, b, c, d}
.length
来获取集合中的项目数量:
Set<String> set2 = {'b','c','d'}; print(set2.length); // 打印结果: 3
const
:
Set<String> set2 = const{'b','c','d'};
通常映射是关联键和值的对象。键和值都可以是任何类型的对象。每个键只出现一次,但可以多次使用相同的值。Dart支持由映射文字和Map类型提供的映射。
下面是几个简单的Dart映射,使用映射文字创建:
var map1 = { '1':'one', '2':'two' }; print(map1); // 打印结果: {1: one, 2: two}
// 创建空的映射 var map1 = {}; // 创建并初始化值 Map map2 = {1:'one',2:'two'}; print(map2); // 打印结果: {1: one, 2: two}
// 创建并初始化值 Map map2 = {1:'one',2:'two'}; // 添加值 map2[3] = "three"; // 修改值 map2[2] = "four"; // 获取值 print(map2[1]); // 打印结果: one
print(map2.length); // 打印结果: 3
// 使用 const 关键字 Map map2 = const {1:'one',2:'two'};
在Dart中,符文是字符串的UTF-32代码点。
Unicode为世界上所有书写系统中使用的每个字母,数字和符号定义唯一的数值。由于Dart字符串是UTF-16
代码单元的序列,因此在字符串中表示32位Unicode值需要特殊语法。
String
类有几个属性可用于提取符文信息。codeUnitAt
和codeUnit
属性返回16位代码单元。使用runes
属性获取字符串的符文。
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
符号文字是编译时常量。