内置类型:
数据类型:num
字符串类型:String
布尔类型:bool
列表类型:list
集合类型:Set
映射类型:Map
Unicode:Runes
标识符:Symbols
Numbers Dart 中数字类型用于表示数字文字,Dart 中的数字类型分为整数和双精度数两种,整数值不大于64位, 具体取决于平台。
Dart支持两种Number类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 int i = 11111 ;double d = 123123123 ;var one = int .parse('1' );assert (one == 1 );var onePointOne = double .parse('1.1' );assert (onePointOne == 1.1 );String oneAsString = 1. toString();assert (oneAsString == '1' );String piAsString = 3.14159 .toStringAsFixed(2 );assert (piAsString == '3.14' );assert ((3 << 1 ) == 6 ); assert ((3 | 4 ) == 7 ); assert ((3 & 4 ) == 0 );
Strings Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串,单引号和双引号可以嵌套使用,否则需要使用\
进行转义。字符串中也可以引用变量与表达式。
在字符串中,请以 ${表达式} 的形式使用表达式,如果表达式是一个标识符,可以省略掉 {}。如果表达式的结果为一个对象,则 Dart 会调用该对象的 toString 方法来获取一个字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 var name = 'zhangsan' ;var a = "my name is $name !" ;var b = "my name is ${name.toUpperCase()} !" ;var a = "my name is " "zhangsan" ;var c = "my name is" + "zhangsan" ;var s1 = ''' You can create multi-line strings like this one. ''' ;var s2 = """This is also a multi-line string.""" ;print (r"换行符:\n" ); print ("换行符:\\n" ); 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.' );
布尔类型 有一个名字为 bool
的类型。 只有两个对象是布尔类型的:true
和 false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var fullName = '' ;assert (fullName.isEmpty);var hitPoints = 0 ;assert (hitPoints <= 0 );var unicorn;assert (unicorn == null );var iMeantToDoThis = 0 / 0 ;assert (iMeantToDoThis.isNaN);
Lists Dart中,数组(Array)由List对象表示 常用属性:
length:返回当前List的长度。
isEmpty:判断是否为空,返回bool类型的值。
isNotEmpty:判断是否为不空,返回bool类型的值。
reversed:倒序输出List中的值。输出结果并不是一个List,需要使用toList()方法将其在转换成List。
常用方法:
add(VALUE):向List中添加单个数据。
addAll([ARRAY]):以数组的形式向List中添加多个数据。
indexOf(ELEMENT):查找ELEMENT是否在List中。如果存在,返回其索引值;如果是不存在,返回 -1。
remove(ELEMENT):删除ELEMENT。
removeAt(INDEX):删除索引值为INDEX的值。
fillRange(START,END,[ VALUE]):将[START,END)范围内的值改为[VALUE]的值。
insert(INDEX,VALUE):在INDEX处插入VALUE。
insert(INDEX,LIST):在INDEX处插入LIST。
join(SYMBOL):以SYMBOL将LIST隔开,并以String类型返回。
STRING.split(SYMBOL):将字符串以SYMBOL进行切割,并以List类型返回。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 var list = [1 , 2 , 3 ,]; print (list[list.length-1 ]);list[0 ] = 2 ; var list = new List (1 );list[0 ] = 2 ; var list = const [1 ,2 ,3 ];i.add(2 ); List <int > list2 = const [1 ,2 ,3 ];list2 = [1 ,2 ,3 ,4 ]; print (list2);const List <int > list3 = [4 ,5 ,6 ];print (list3);
Dart 在 2.3 引入了 扩展操作符(…)和 空感知扩展操作符(…?),它们提供了一种将多个元素插入集合的简洁方法。
例如,你可以使用扩展操作符(…)将一个 List 中的所有元素插入到另一个 List 中:
1 2 3 var list = [1 , 2 , 3 ];var list2 = [0 , ...list];assert (list2.length == 4 );
如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(…?)来避免产生异常:
1 2 3 var list;var list2 = [0 , ...?list];assert (list2.length == 1 );
Dart 还同时引入了 集合中的 if 和 集合中的 for 操作,在构建集合时,可以使用条件判断 (if) 和循环 (for)。
1 2 3 4 5 6 7 8 9 10 11 12 13 var nav = [ 'Home' , 'Furniture' , 'Plants' , if (promoActive) 'Outlet' ]; var listOfInts = [1 , 2 , 3 ];var listOfStrings = [ '#0' , for (var i in listOfInts) '#$i ' ]; assert (listOfStrings[1 ] == '#1' );
Maps 键值对相关的对象。 键和值可以是任何类型的对象。每个键只出现一次, 而一个值则可以出现多次。Dart 中 Map 提供了 Map 字面量以及 Map 类型两种形式的 Map。
Map的不同类型:
HashMap是无序的,这意味着它迭代的顺序是不确定的
LinkedHashMap按key的插入顺序进行迭代
SplayTreeMap按key的排序顺序进行迭代
当Map的一个操作正在执行的时候,通常不允许修改Map(添加或删除key)
1 2 3 4 5 6 7 8 9 10 11 12 13 var companys = {'a' : '阿里巴巴' , 't' : '腾讯' , 'b' : '百度' };var companys2 = new Map ();companys2['a' ] = '阿里巴巴' ; companys2['t' ] = '腾讯' ; companys2['b' ] = '百度' ; companys['j' ] = '京东' ; var c = companys['c' ]; companys['a' ] = 'alibaba' ;
Sets 在 Dart 中,set 是一组特定元素的无序集合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var names = <String >{};Set <String > set = {'aaa' , 'bbb' };for (var item in set ) { print (item); } set .forEach((element) { print (element); }); if (set .contains("aaa" )) { print ("包含元素" ); } set .clear();
Runes 在 Dart 中,runes 公开了字符串的 Unicode 码位。使用 characters 包 来访问或者操作用户感知的字符,也被称为 Unicode (扩展) grapheme clusters。
如果需要获得特殊字符的Unicode编码,或者需要将32位的Unicode编码转换为字符串,就可以借助Runes类。
Dart表达Unicode代码点的常用方法是\uXXXX,其中XXXX是4位十六进制值。要指定多于或少于4个十六进制数字,需要将值放在大括号中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 var clapping = '\u{1f44f}' ; print (clapping);print (clapping.codeUnits); print (clapping.runes.toList()); print ( String .fromCharCode(128079 ));print ( String .fromCharCodes(clapping.runes));print ( String .fromCharCodes([55357 , 56399 ]));print ( String .fromCharCode(0x1f44f ));Runes input = new Runes( '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}' ); print (String .fromCharCodes(input));import 'package:characters/characters.dart' ;... var hi = 'Hi 🇩🇰' ;print (hi);print ('The end of the string: ${hi.substring(hi.length - 1 )} ' );print ('The last character: ${hi.characters.last} \n' );
Symbols Symbol 表示 Dart 中声明的操作符或者标识符。 可以看作C中的宏。表示编译时的一个常量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var i = #A; main() { print (i); switch (i){ case #A: print ("A" ); break ; case #B: print ("B" ); break ; } var b = Symbol ("b" ); print (#b == b); }
参考