01 开发工具配置
- vscode
- vscode 插件:
- dart
- code runner
02 入口 注释 变量 常量
- 注意常量的两种定义方式 const final
- 区别:final 可以开始不赋值,只能赋一次 ; 而 final 不仅有 const 的编译时常量的特性,最重要的它是运行时常量,并且 final是 惰性初始化,即在运行时第一次使用前才初始化
final a = new DateTime.now();
- 字符串
- 利用一对单引号或者一对双引号定义
- 利用一对三个单引号或者一对三个双引号定义(定义的字符串可以换行)
03 Dart的数据类型详解 int double String bool List Maps
- 数据类型的判断
int number = 123;
if (number is int) {
print('number 变量是 int 类型');
} else {
print('number 变量不是 int 类型');
}
nullNaN
04 Dart运算符 条件表达式 Dart 类型转换
-
算术运算符
~/表示取整 -
赋值运算符
??表示只为空时将右边的值赋值到左边 -
类型转换
- 字符串转
int或double,使用int.parse或者double.parse - number 类型转字符串类型,
toString() isEmpty判断字符串是否为空
- 字符串转
-
判断是否相等
==
if (myNum == 0) {
print('0');
} else {
print('非0');
}
05 Dart 循环语句 for while do...while break continue 多维列表循环
05-1 自增 自减
void main() {
var a = 3;
var b = a++;
print(a); // 4
print(b); // 3
}
void main() {
var a = 3;
var b = --1;
print(a); // 2
print(b); // 2
}
循环
- continue 跳过循环
- break 跳出循环
06 Dart 集合类型List Set Map详解 以及循环语句 forEach map where any every
06-1 List
-
属性
- length
- reversed 反转 返回结果
(苹果,香蕉,李子),使用 toList() 方法转为 List 类型 - isEmty 和 isNoEmpty
-
方法
- add() 增加元素
- addAll() 拼接 List,传入 List
- indexOf() 查找元素,传入元素
- remove() 移除元素,传入元素
- removeAt() 移除元素,传入索引
- fillRange(start, end, value) 修改
- insert(index, value) 插入一个值
- insertAt(index, List) 插入 List
- toList() 其他类型转成 List
- join() List 连接成 String
- split() String 转成 List
- forEach()
- where()
- any()
- every()
-
循环遍历
- for...in...
- forEach
06-2 Set
- 数组去重
void main() {
var mySet = new Set();
mySet.allAll(['苹果', '香蕉', '李子', '香蕉', '李子', '香蕉']);
print(mySet); // {苹果,香蕉,李子}
print(mySet.toList()) // [苹果,香蕉,李子]
}
06-3 Map
- 常用属性
- keys // 结果 (name,age).toList()
- values
- isEmpty
- isNoEmpty
- 方法
- remove(key) 删除指定key的数据
- addAll({...}) 合并映射 给映射内增加属性
- containsValue 查看映射内的值 返回true/false
- forEach
- map
- where
- any
- every
07 Dart中的函数 函数的定义 可选参数 默认参数 命名参数 箭头函数 匿名函数 闭包等 - 上
07-1 可选参数
void main() {
String personInfo(String name, [String sex = '女', int age]) {
if (age != null) {
return '姓名:$name -- 性别:$sex -- 年龄保密';
} else {
return '姓名:$name -- 性别:$sex -- 年龄:$age';
}
}
persionInfo('Hiraku')
}
07-2 命名参数
void main() {
String personInfo(String name, {String sex = '女', int age}) {
if (age != null) {
return '姓名:$name--性别:$sex--年龄保密';
} else {
return '姓名:$name--性别:$sex--年龄:$age';
}
}
persionInfo('Hiraku', sex:'男', age:20)
}
08 Dart中的函数 箭头函数 匿名函数 闭包等-下
08-1 箭头函数
void main() {
List myList = [2, 4, 6, 8, 34, 3, 7];
var relList = myList.map((value) => value > 7 ? value * 2 : value);
print(relList.toList());
}
08-2 函数调用函数
void main() {
bool isEven(int number) {
return number % 2 == 0
}
void printEvenNumber(int number) {
for(int i = 1; i <= number; i++) {
if(isEven(i)) {
print(i);
}
}
}
printEvenNumber(10);
}
08-3 匿名函数
void main() {
// 匿名方法
var myFun = () {
print('匿名函数执行了---');
};
myFun();
}
08-4 自执行方法
void main() {
// 自执行方法
(() {
print('自执行方法执行了---');
})();
}
08-5 递归
void main() {
int sum = 0;
recursiveFunc(int n) {
sum += n;
if (n < 1) {
return;
}
recursiveFunc(n-1);
}
recursiveFunc(100);
print(sum);
}
08-6 闭包
- 全局变量特点: 全局变量常驻内存、全局变量污染全局
- 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
- 想实现的功能:
1.常驻内存
2.不污染全局 - 产生了闭包,闭包可以解决这个问题.....
- 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
- 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
void main() {
func() {
int a = 123;
return () {
a++;
print(a);
};
}
var b = func();
b();
b();
b();
}