上QQ阅读APP看书,第一时间看更新
2.1.1 常用的数据类型
Dart的常用数据类型如下:
数字类型
Dart语言中,num、int和double都是类,也就对象级别,默认值为null,这不同于Java的基本数据类型,而且Dart语言没有float、long等数据类型。下面的代码表示用整型乘除浮点型时,结果是浮点型:
布尔类型
Dart语言中的布尔类型也是严谨的,只有true和false两个值。布尔类型作为判断的标识,活跃在各大语言的逻辑判断中。现在绝大多数语言的布尔运算都是严谨的,用法也比较简单。注意,关键字是bool,这和Java是不同的:
---->[day2/02/bool.dart]---- bool isMan = true; bool isMarried = false;
字符串类型
字符串是编程语言中不可或缺的部分。说它简单,拼拼合合,非常简单;说它难,正则一出马,它也难如登天。需要注意的是,在Dart语言中,字符串支持单引号、双引号以及三引号,其中,单引号和双引号中的双引号需要转义,三引号会将内容原样输出,连注释都无法“逃脱”。另外,${exp}可以在字符串内插入字符串表达式exp,示例如下:
列表类型
列表可以根据泛型盛放多个同类元素,在编程语言中也是必备的类型。Dart语言中的List也是一个类,在使用方式上你会感觉它像数组。不过它可以随意对元素进行增删改查,示例如下:
---->[day2/02/list.dart]---- List<String> languages = ['Java', 'Dart', 'Python', 'C++', 'Kotlin']; print(languages[0]); //Java 访问索引为0的元素 languages.add("JavaScript");//添加元素 print(languages.length);//6 数组长度 languages.removeAt(1);//移除第一个元素 languages.insert(3, "PHP");//定点插入 print(languages);//[Java, Python, C++, PHP, Kotlin, JavaScript] print(languages.getRange(3, 5));//(PHP, Kotlin) 获取指定访问的元素 print(languages.sublist(2, 4)); //[C++, PHP] 截取 print(languages.join("!")); //Java!Python!C++!PHP!Kotlin!JavaScript print(languages.isEmpty);//false 获取指定访问的元素是否为空 print(languages.contains("Ruby"));//false 是否包含 languages.clear();//清空
关于列表,这里介绍几个要点:
---->[元素类型转化:通过map函数遍历列表并生成新元素列表]---- List<String> strNum = ['11', '23', '34', '24', '65']; var intNum= strNum.map((String str)=> int.parse(str)).toList(); print(intNum);//[11, 23, 34, 24, 65] ---->[条件遍历过滤出列表:通过map函数遍历列表并生成新元素列表]---- var bigThan30= intNum.where((int num)=>num>30).toList(); print(bigThan30);//[34, 65] ---->[列表解构]---- var parser=[0,100,...intNum,30]; print(parser);//[0, 100, 11, 23, 34, 24, 65, 30] ---->[构造列表时允许执行if语句]---- bool flag=bigThan30.length >= 3; var chooseLi=[if(!flag) 666,...parser,if(flag) 555 else 55]; print(chooseLi);//[666, 0, 100, 11, 23, 34, 24, 65, 30, 55]
集合类型
众所周知,集合和列表的区别在于集合中的元素不能重复。所以添加重复元素时会返回false,表示没加进去。这就像数学中的集合,Set类中也包含集合运算的方法:
---->[day2/02/set.dart]---- Set<String> languages = {'Java', 'Dart', 'Python', 'C++', 'Kotlin',"Java"}; print(languages);//{Java, Dart, Python, C++, Kotlin} print(languages.add('Java'));//false 表示没添加进去 print(languages.add('JavaScript'));//true print(languages.contains("Dart"));//true 是否存在 languages.remove("JavaScript");//移除元素 print(languages.toList());//列表化 //[Java, Dart, Python, C++, Kotlin] languages.forEach((e){print(e);});//遍历 print({1,2,3,4}.difference({2,3,6}));//{1, 4},两个不同元素构成的集合 print({1,2,3,4}.union({2,3,6}));//{1, 2, 3, 4, 6} 并集 print({1,2,3,4}.intersection({2,3,6}));//{2, 3} 交集
映射类型
Map作为若干个键值对的容器,享有映射之名。要注意一个Map对象的键不能重复,值可以重复。在Dart语法中,Map比较灵活,和列表之间相互转化非常方便:
---->[day2/02/map.dart]---- Map<String,num> dict = {"a": 1, "b": 30, "c": 70, "price": 40.0}; print(dict); //{a: 1, b: 30, c: 70, price: 40.0} print(dict["price"]); //40.0 dict["a"] = 2;//修改 print(dict); //{a: 2, b: 30, c: 70, price: 40.0} print(dict.containsKey("price")); //true 是否包含键 print(dict.containsValue("price")); //false 是否包含值 print(dict.isEmpty); //false 是否为空 print(dict.isNotEmpty); //true 是否不为空 print(dict.length); //4 长度 dict.remove("c");//移除 print(dict); //{a: 2, b: 30, price: 40.0} print(dict.keys.toList());//[a, b, price] 将键转为数组 print(dict.values.toList());//[2, 30, 40.0] 将值转为数组 List<int> numLi=[1,2,3,4,5]; List<String> numEN=["one","two","three","four","five"]; List<String> numCN=["壹","贰","叁","肆","伍"]; Map<int,String> mapEN= Map.fromIterables(numLi, numEN); Map<int,String> mapCN= Map.fromIterables(numLi, numCN); print(mapCN);//{1: 壹, 2: 贰, 3: 叁, 4: 肆, 5: 伍} print(mapEN);//{1: 壹, 2: 贰, 3: 叁, 4: 肆, 5: 伍} // {1: one, 2: two, 3: three, 4: four, 5: five} print(Map.fromIterables(mapEN.values, mapCN.values));