Number
- num 可以声明是整数,也可以是浮点数
- int 只能声明整数
- double 只能声明浮点数
main() {
int cont = 6;
// cont = 6.3;
double core = 90;
print(core); // 90.0
num age = 18;
num sum = 20.9;
}
- 常用api
main() {
int cont = 6;
// cont = 6.3;
double core = 90;
print(core); // 90.0
num age = 18;
num sum = 20.9;
print(core.toString()); // '90.0'
print(age.toDouble()); // 18.0
print(sum.toInt()); // 20 向下取整
print(3.1415926.round()); //3 四舍五入
print(3.6.round()); //4 四舍五入
print(3.1415926.toStringAsFixed(5)); // 3.14159 四舍五入指定小数位数
print(10.remainder(4)); // 2 取余
// 比较: a.compareTo(b); a = b 返回:0; a > b 返回: 1; a < b 返回: -1;
print(10.compareTo(10)); // 0
print(10.compareTo(8)); // 1
print(10.compareTo(20)); // -1
// 最大公约数
print(10.gcd(16)); // 2
print(12.gcd(16)); // 4
// 科学计数法
print(1000.toStringAsExponential(2)); // 1.00e+3
print(1000.toStringAsExponential(1)); // 1.0e+3
}
- NaN
var n = 0 / 0;
print(n); // NaN
print(n.isNaN); // true
字符串
- 字符串声明
// 单引号声明
var str1 = 'hello';
// 双引号声明
var str2 = "world";
// 三个引号可声明多行的字符串,单双均可以,要成对出现
String str4 = """我系
渣渣辉""";
String str5 = '''你洗
古天乐''';
- 字符串拼接
var str1 = 'hello';
String str5 = '''你洗
古天乐''';
print(str1 + str5);
// hello你洗
// 古天乐
- 字符串常用api
print('abcdefg'.split('')); // [a, b, c, d, e, f, g]
// 去除首位空格
print(' 123 '.trim()); // 123
// 判空
print(''.isEmpty); // true
print(''.isNotEmpty); // false
// 替换
print('hello java'.replaceAll('java', 'dart')); // hello dart
print('1s5f15t1rg1gh5r1g1r1h5rt1h5r'.replaceAll(RegExp(r'\d+'), '_')); // _s_f_t_rg_gh_r_g_r_h_rt_h_r
// 判断是否是手机号
print(RegExp(r'^1\d{10}$').hasMatch('13312580490')); // true
// 查找字符串
print('hello'.contains('e')); // true
// 定位字符串
print('hello'.indexOf('e')); // 1
print('hello'.lastIndexOf('o')); // 3
- 模板字符串 强调: ${变量}, ${}可以省略
var message1 = "my name is $name, age is $age, height is $height";
var message2 = "name is $name, type is ${name.runtimeType}";
print(message1);
print(message2);
布尔类型
-
通过bool关键字声明
-
布尔类型有两个值: true 和 false
bool flag = true;
print(flag);
bool flag = false;
print(flag);
- 对变了进行判断,要显式的检查布尔值
bool flag = true;
var tag;
if (flag) {
print('');
}
if(tag) {} // 这样会报警告,dart强类型语言不会隐式转换
if(tag == null) {}
List
- 声明
//字面量方式声明
List list1 = [];
List list2 = <int>[];
//构造函数声明
List list3 = new List.empty(growable: true); // 不限制长度的空列表
List list4 = new List.filled(3, 0);
print(list1); // []
print(list2); // []
print(list3); // []
print(list4); // [0, 0, 0]
- 扩展操作符
var list = [1,2,3];
List list1 = <int>[0, ...list];
var list2;
// 避免null扩展
List list1 = <int>[0, ...?list2];
- 常用api
var l = [1,2,55,03,54,2615,6,'fsf','fs','rwet',8,12,56,1,5];
// 返回列表长度
print(l.length);
// 列表翻转
print(l.reversed.toList());
// 添加元素
l.addAll([99,88,77]);
print(l);
// 删除指定元素
l.remove(88);
print(l);
// 删除指定下标元素
l.removeAt(1);
// 指定位置添加元素
l.insert(5,999);
// 指定位置添加多个元素
l.insertAll(5,[1,2,3,4,56]);
print(l);
// 清空列表
l.clear();
// 列表判空
print(l.isEmpty);
// 数组合并
list words = ['hello','world'];
print(words.join('-')); // hello-world
- 遍历
List test = <int>[1,2,3,4,6,7,8];
for(int i = 0; i < test.length;i++) {
// print(test[i]);
}
for(int item in test) {
// print(item);
}
// forEach
test.forEach((element) {
print(element);
});
// map
print(test.map((e) => e * e).toList());
// [1, 4, 9, 16, 36, 49, 64] map完是可迭代对象,可以同toList方法转换成数组
// where
print(test.where((element) => element.remainder(2) == 0));
// (2, 4, 6, 8) 过滤出偶数
// any
print(test.any((element) => element > 3)); // true
// 判断是否有一个元素大于3,返回布尔值
// every
print(test.every((element) => element > 2)); // false
// 判断是否所有元素大于3,返回布尔值
Set
- 定义: 是无序元素不重复的集合
- 声明
var nums = <int>{ 1, 2, 3 };
print(nums);
Set animals = new Set();
- 不能通过下标取值
// print({1,2,3}[2]) 编译不通过
- 具有集合特有的操作(交并差)
// 交并差
Set set1 = {1,2,8,9,4,6,12,3};
Set set2 = {1,2,8,11,18,26,12,3};
// 交集
print(set1.intersection(set2)); // {1, 2, 8, 12, 3}
// 并集
print(set1.union(set2)); // {1, 2, 8, 9, 4, 6, 12, 3, 11, 18, 26}
// 差集
print(set1.difference(set2)); // {9, 4, 6}
- 常用api
Set animals = new Set();
animals.add('dog');
animals.add('cat');
animals.addAll(['旺财','二哈']);
print(animals); // {dog, cat, 旺财, 二哈}
print(animals.toList()); // [dog, cat, 旺财, 二哈]
print(animals.first); // dog
print(animals.last); // 二哈
// 可以通过Set给数组去重
print([1,1,1,'a','a',2,3,6,48,55,55].toSet().toList()); // [1, a, 2, 3, 6, 48, 55]
Map
- 定义: map是一个无序的键值(key-value)对;也作哈希或字典。
- 声明方式
var p = {'name':'w','age':18};
Map map = new Map();
map['name'] = 'g';
map['sex'] = '男';
- 常用api
var p = {'name':'w','age':18};
Map map = new Map();
map['name'] = 'g';
map['sex'] = '男';
// 属性访问
print(map['sex']);
// 判断map是否存在某个键
print(p.containsKey('name'));
p.putIfAbsent('school', () => '蓝翔');
print(p); // {name: w, age: 18, school: 蓝翔}
p.putIfAbsent('school', () => '新东方烹饪');
print(p); // {name: w, age: 18, school: 蓝翔}
// 获取map中所有的key和value,可迭代对象
print(p.keys); // (name, age, school)
print(p.values); // (w, 18, 蓝翔)
p.remove('name');
print(p); // {age: 18, school: 蓝翔}
// 当key满足时删除该属性
p.removeWhere((key, value) => key == 'age');
print(p); // {school: 蓝翔}