内置类型
Numbers (int, double)
int
整数值;长度不超过 64 位,具体取值范围 依赖于不同的平台。在 DartVM 上其取值位于 -263 至 263 - 1 之间。在 Web 上,整型数值代表着 JavaScript 的数字(64 位无小数浮点型),其允许的取值范围在 -253 至 253 - 1 之间。
int a=12;
var b=12;
///如果使用时来强类型定义一个带小数的类型,那么会报错
int c=1.2; //error A value of type 'double' can't be assigned to a variable of type 'int'
//如果用弱类型定义,则不会报错
var c=1.2
double
64 位的双精度浮点数字,且符合 IEEE 754 标准。
/// 定义double 的时候,定义整数,则不会报错
double a=12;
///整型字面量将会在必要的时候自动转换成浮点数字面量:
注意:在 Dart 2.1 之前,在浮点数上下文中使用整数字面量是错误的。
开发中遇到的问题:
1、数字怎么转换成字符串类型?
2、数字怎么保留两位小数呢?
Strings (String)
Dart 字符串(String 对象)包含了 UTF-16 编码的字符序列。可以使用单引号或者双引号来创建字符串,
字符串字面量是一个编译时常量,只要是编译时常量 (null、数字、字符串、布尔) 都可以作为字符串字面量的插值表达式:
单引号
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
双引号
var s4 = "It's even easier to use the other delimiter.";
多行字符串
///三个单引号
var s1 = '''
You can create
multi-line strings like this one.
''';
///三个双引号
var s2 = """This is also a
multi-line string.""";
查找&替换
contains 、startsWith、endsWith、indexOf |replaceAll
var a = 'web site ducafecat.tech';
print(a.contains('ducafecat'));
print(a.startsWith('web'));
print(a.endsWith('tech'));
print(a.indexOf('site'));
//替换
print('hello word word!'.replaceAll('word', 'ducafecat'));
截取&分割
substring 这个和js的用法一样, 字符串转数组 split('')
print(a.substring(0,5));
var b = a.split(' ');
print(b.length);
print(b[0]);
大小写转换
toLowerCase() 和toUpperCase()
print(a.toLowerCase());
print(a.toUpperCase());
转义字符串
var s3 = 'It's easy to escape the string delimiter.';
/// 不做任何处理的字符串
var s = r'In a raw string, not even \n gets special treatment.';
// 代码中文解释
var s = r'在 raw 字符串中,转义字符串 \n 会直接输出 “\n” 而不是转义为换行。';
表达式
使用插值表达式${} ,如果表达式是一个标识符,可以省略掉 {}。如果表达式的结果为一个对象,则 Dart 会调用该对象的 toString 方法来获取一个字符串
var hello="hello";
var world="dart";
print('我在学dart, $hello $world')
print('我在学dart '+hello+' '+world);
var n10=10;
print(n10.toString())
print('${n10.toString()}')
开发中遇到的问题:
1、字符串数字怎么转换int ?
2、字符串数字怎么转换double?
Booleans (bool)
概念
Dart 使用 bool 关键字表示布尔类型,布尔类型只有两个对象 true 和 false,两者都是编译时常量。
Dart 的类型安全不允许你使用类似 if (nonbooleanValue) 或者 assert (nonbooleanValue) 这样的代码检查布尔值。相反,你应该总是显示地检查布尔值。
//js
var a=10;
if(a){
}
//在dart 中会报错
// 检查是否是空字符串.
var fullName = '';
assert(fullName.isEmpty);
// 判断.
var hitPoints = 0;
assert(hitPoints <= 0);
// 检查是否是空.
var unicorn;
assert(unicorn == null);
// 检查非数字.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
Lists (也被称为 arrays)
概念
数组 (Array) 是几乎所有编程语言中最常见的集合类型,在 Dart 中数组由 List 对象表示。通常称之为 List。Dart 中的列表字面量是由逗号分隔的一串表达式或值并以方括号 ([]) 包裹而组成的。
var list = [1, 2, 3];
var list = ['Car','Boat','Plane'];
List 的下标索引从 0 开始,第一个元素的下标为 0,最后一个元素的下标为 list.length - 1。你可以像 JavaScript 中的用法那样获取 Dart 中 List 的长度以及元素:
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
Dart 在 2.3 引入了 扩展操作符(...)和 空感知扩展操作符(...?),它们提供了一种将多个元素插入集合的简洁方法。
例如,你可以使用扩展操作符(...)将一个 List 中的所有元素插入到另一个 List 中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常:
var list2 = [0, ...?list];
assert(list2.length == 1);
属性
| 名称 | 说明 |
|---|---|
| isEmpty | 是否为空 |
| isNotEmpty | 是否不为空 |
| first | 第一个对象 |
| last | 最后一个对象 |
| length | 个数 |
| reversed | 反转 |
方法
| 名称 | 说明 |
|---|---|
| add | 添加 |
| addAll | 添加多个 |
| insert | 插入 |
| insertAll | 插入多个 |
| indexOf | 查询 |
| indexWhere | 按条件查询 |
| remove | 删除 |
| removeAt | 按位置删除 |
| fillRange | 按区间填充 |
| getRange | 按区间获取 |
| shuffle | 随机变换顺序 |
| sort | 排序 |
| sublist | 创建子 |
add | addAll 插入
add | addAll
var fruits = ['apples', 'oranges'];
fruits.add("banana");
print(fruits);
var subject=['js','java'];
//fruits+subject ?
remove 删除
remove | removeAt | removeLast | removeRange
var fruits = ['apples', 'oranges'];
fruits.add("banana");
print(fruits);
var subject=['js','java'];
subject.addAll(fruits);
///删除
subject.remove("java");
//按索引删除
subject.removeAt(1);
//删除最后一个
subject.removeLast();
indexOf 查找下标
indexOf()
var fruits = ['apples', 'oranges'];
// Access a list item by index.
assert(fruits[0] == 'apples');
// Find an item in a list.
assert(fruits.indexOf('apples') == 0);
高级用法
///在构建集合时,可以使用条件判断 (if) 和循环 (for)。
var promoActive=true;
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
///下面是使用 集合中的 for 将列表中的元素修改后添加到另一个列表中的示例:
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');
Sets (Set)
概念
在 Dart 中,set 是一个无序的,元素唯一的集合。因为一个 set 是无序的,所以无法通过下标(位置)获取 set 中的元素。
// Create an empty set of strings.
var ingredients = <String>{};
// Add new items to it.
ingredients.addAll(['gold', 'titanium', 'xenon']);
print(ingredients.length == 3);
// Adding a duplicate item has no effect.
ingredients.add('gold');
print(ingredients.length == 3);
// Remove an item from a set.
ingredients.remove('gold');
print(ingredients.length == 2);
// You can also create sets using
// one of the constructors.
var atomicNumbers = Set.from([79, 22, 54]);
print(ingredients);
方法
| 名称 | 说明 |
|---|---|
| addAll | 添加 |
| contains | 查询单个 |
| containsAll | 查询多个 |
| difference | 集合不同 |
| intersection | 交集 |
| union | 联合 |
| lookup | 按对象查询到返回对象 |
| remove | 删除单个 |
| removeAll | 删除多个 |
| clear | 清空 |
| firstWhere | 按条件正向查询 |
| lastWhere | 按条件反向查询 |
| removeWhere | 按条件删除 |
| retainAll | 只保留几个 |
| retainWhere | 按条件只保留几个 |
add 新增
remove 移除
contains containsAll 来检查一个或多个元素是否在 set 中
Maps (Map)
概念
map 是一个无序的 key-value (键值对)集合,就是大家熟知的 dictionary 或者 hash。 map 将 kay 与 value 关联,以便于检索。和 JavaScript 不同,Dart 对象不是 map。
//定义map
//1 、强制类型定义
Map map= Map<String,String>();
map["name"]="张三";
var map1={};
map["age"]=20; //。报错,类型不匹配
//2、弱类型定义
Map map= Map();
基本属性
| 名称 | 说明 |
|---|---|
| isEmpty | 是否为空 |
| isNotEmpty | 是否不为空 |
| keys | key 集合 |
| values | values 集合 |
| length | 个数 |
| entries | 加工数据入口 |
方法
| 名称 | 说明 |
|---|---|
| addAll | 添加 |
| addEntries | 从入口添加 |
| containsKey | 按 key 查询,返回true|false |
| containsValue | 按 value 查询返回true|false |
| clear | 清空 |
| remove | 删除某个 |
| removeWhere | 按条件删除 |
| update | 更新某个 |
| updateAll | 按条件更新 |
addAll
var b = new Map<String, String>();
b.addAll({'first': 'java', 'second': 'python'});
addEntries
var b = new Map<String, String>();
b.addEntries(a.entries);
containsKey
var cb = new Map<String, String>();
cb.addAll({'first': 'java', 'second': 'python'});
print(cb.containsKey('first'));
var cb = new Map<String, String>();
cb.addAll({'first': 'java', 'second': 'python'});
print(cb.containsValue('java'));//true
clear
var cb = new Map<String, String>();
cb.addAll({'first': 'java', 'second': 'python'});
print(cb);
cb.clear();
print(cb); //{}
remove
var cb = new Map<String, String>();
cb.addAll({'first': 'java', 'second': 'python'});
print(cb);
cb.remove('first')
print(cb); //{second: python}
removeWhere
var cb = new Map<String, String>();
cb.addAll({'first': 'java', 'second': 'python'});
cb.removeWhere((key,val) => key == 'java');
print(cb) //{second: python}
update
var cb = new Map<String, String>();
cb.addAll({'first': 'java', 'second': 'python'});
cb.update('first', (val) => 'first0001');
print(cb) //{second: first0001}
updateAll
var a=Map();
a.updateAll((key, val) => "---$val---");
Runes (常用于在 Characters API 中进行字符替换)
Runes 对象是一个 32位 字符对象,用来表示一个字。
这样设计也是考虑兼容 UTF-16 四个字节的情况。