变量与常量
变量
var
可以通过 var 关键字来声明一个变量,可以整型、字符串类型、布尔类型等
var str = 'string';
var myNum = 123;
var flag = true;
String
通过 String 关键字来声明字符串变量
String str = '123';
int
通过 int 关键字来声明整型变量
int a = 10;
double
通过 double 关键字来声明浮点型变量
double d = 3.14;
bool
通过 bool 关键字来声明布尔型变量
bool flag = false;
常量
const
这与 JavaScript 中的类式,通过const关键字来声明常量
const a = 10;
final
final date = new DateTime.now();
通过 final关键字也可以声明常量
与const的区别:
const是编译时常量,在定义时就需要初始化,并且其值必须是在编译期间就可以确定的。final是运行时常量,在定义时可以不初始化,但一旦初始化后就无法再修改其值。
List 和 Map
List
List 数据类型就类式与 JavaScript 中的数组
创建 List
1.直接创建
var list = [];
list.add(1);
print(list);
// or
List list2 = []
list2.add(1);
print(list2);
2.声明类型
var list = <String>['1', '2'];
list[1] = '0';
print(list2);
3.创建固定长度
var list = List<int>.filled(3, 6);
print(list3);
Map
Map 数据类型是一个字典集,类似于 JavaScript 中的 json
创建 Map
1.直接创建
var personMap = {
"name": "John",
"age": 18,
"work": ["程序猿", "外卖员"]
};
print(personMap['name']);
print(personMap['age']);
2.通过 new 关键字
var map = new Map();
map['name'] = "Maojiu";
判断数据类型 is
可以通过is关键字来判断数据类型
var a = 'string';
print(a is String); // true
运算符与条件判断
运算符
算数运算符
int a = 10;
int b = 20;
print(a + b); // 加
print(a - b); // 减
print(a * b); // 乘
print(a / b); // 除
print(a ~/ b); // 取整
print(a % b); // 取余
关系运算符
> < == >= <= !=
int a = 10;
int b = 20;
print(a > b); // false
逻辑运算符
! && ||
bool flag = false;
print(!flag); // true
赋值运算符
- 基础赋值运算:
=??=(如过问好前面的值为空,则把等号后面的值赋值给它)- 复合赋值运算:
+= -+ \*= /= %= ~/=
三目运算符
a > b ? 'a': 'b'
int a = 10;
a > 100 ? true : false
?? 运算符
当 ?? 前面的值为空时则取 ?? 后面的饿值
var m;
var n = m ?? 10;
print(n);
条件判断
if else
bool flag = true;
if (flag) {
print('true');
} else {
print('false');
}
switch case
switch (number) {
case 1:
print('1');
break;
case 2:
print('2');
break;
default:
print('unknown');
}
数据类型转换
String to Number
通过int.parse()或double.parse()来转换
String str1 = '123';
String str2 = '';
// 使用 try ... catch 捕获异常
try {
var num1 = int.parse(str1);
var num2 = double.parse(str2);
print('num1:$num1');
print(num2);
} catch (e) {
print('Error:num2');
}
Number to String
通过 toString() 方法转换
int a = 10;
String b = a.toString();
print(b);
其他类型转换成 bool
//isEmpty: 判断字符串是否为空
String str = '';
if (str.isEmpty) {
print('str is empty');
}
循环
for 循环
- 简单示例
for (int i = 0; i < 10; i++) {
print(i);
}
- 遍历 List
List list = [
{
'cate': 'cate1',
'new': [
{'title': 'cate1 new1'},
{'title': 'cate1 new2'},
{'title': 'cate1 new3'}
]
},
{
'cate': 'cate2',
'new': [
{'title': 'cate2 new1'},
{'title': 'cate2 new2'},
{'title': 'cate2 new3'}
]
}
];
for (int i = 0; i < list.length; i++) {
print(list[i]['cate']);
for (int j = 0; j < list[i]['new'].length; j++) {
print(list[i]['new'][j]['title']);
}
print('----------');
}
while 循环
int i = 0;
while (i < 10) {
print(i);
i++;
}
do ... while 循环
int i = 0;
do {
print(i);
i++;
} while (i < 10);
List 常用属性和方法
常用属性
length
通过length来获取 List 的长度
List list = [1,2,3,4,5];
print(list.length); // 5
reversed
通过reversed将 List 翻转
List list = [1,2,3,4,5];
print(list.reversed); // (1,2,3,4,5)
isEmpty & isNotEmpty
可以通过isEmpty和isNotEmpty来判断 List 是否为空
List list = [1,2,3,4,5];
print(list.isEmpty); // false
print(list.isNotEmpty); // true
常用方法
add
通过add向 List 中增加一个元素
List list = <String>['香蕉', '菠萝', '苹果'];
list.add('西瓜');
addAll
向 List 中添加多个元素(拼接 List)
List list = <String>['香蕉', '菠萝', '苹果'];
list.addAll(<String>['哈密瓜', '葡萄']);
indexOf
在 List 中查找,传入的为具体的值,若查到相应的值,则返回对应值的索引,否则返回-1
List list = <String>['香蕉', '菠萝', '苹果'];
print(list.indexOf('苹果'))
remove
删除 List 中的元素,传入的为具体的值
List list = <String>['香蕉', '菠萝', '苹果'];
list.remove('苹果');
removeAt
删除 List 中的元素,传入的为索引值
List list = <String>['香蕉', '菠萝', '苹果'];
list.removeAt(1);
fillRange
修改 List 中的元素,三个参数分别为: 起始索引,结束索引,要修改的值
List list = <String>['香蕉', '菠萝', '苹果'];
list.fillRange(0, 1, 'aaa');
insert
通过insert(index, value)向 List 中的指定位置插入元素,index为索引,value为要插入的值
List list = <String>['香蕉', '菠萝', '苹果'];
list.insert(1, '西瓜');
insertAll
通过insertAll(index, List)向 List 中的指定位置插入 List
List list = <String>['香蕉', '菠萝', '苹果'];
list.insertAll(1, <String>['西瓜', '葡萄']);
toList
通过toList将其他类型转换成 List
List list = [1,2,3,4,5];
print(list.reversed.toList()); // [5,4,3,2,1]
join
将 List 转换成字符串
List list = [1,2,3,4,5];
print(list.join(','));
split
将字符串转换成 List
String str = 'a-b-c';
print(str.split('-'));
Set 集合
基本使用
var s = new Set();
s.add('a');
print(s); // {a}
实现数组去重
List list = <int>[1, 2, 3, 4, 5, 4, 3, 2, 1];
var s = new Set();
s.addAll(list);
s.toList();
print(s.toList());
Map 常用的属性和方法
常用属性
keys
通过keys来获取所有的 key 值
var person = {"name": "John", "age": 18};
print(person.keys.toList());
values
通过values来获取所有的 value 值
var person = {"name": "John", "age": 18};
print(person.values.toList());
isEmpty & isNotEmpty
通过isEmpty and isNotEmpty来判断是否为空
var person = {"name": "John", "age": 18};
print(person.isEmpty); // false
print(person.isNotEmpty); // true
常用方法
remove
通过remove(key)来删除指定 key 的数据
var person = {"name": "John", "age": 18};
person.remove('name');
addAll
使用addAll({...})来合并 Map 映射
var person = {"name": "John", "age": 18};
person.addAll({"sex": "男"});
containsKey
使用containsKey来查看映射内的键(返回 true/false)
var person = {"name": "John", "age": 18};
print(person.containsKey("name"));
containsValue
使用containsValue来查看映射内的值(返回 true/false)
var person = {"name": "John", "age": 18};
print(person.containsValue("John"));
常用的遍历方法
List
forEach
List list = ['吃饭', '睡觉', '敲代码'];
list.forEach((element) {
print(element);
});
map
List list2 = [1, 2, 3];
var newList = list2.map((e) => e * 2);
print(newList.toList());
where
List list = [1, 2, 3, 5, 7, 9];
var newList = list.where((element) => element > 5); // 只返回满足要求的(过滤)
print(newList.toList());
any
List list = [1, 2, 3, 5, 7, 8];
var res = list.any((element) => element > 5); // 只有有一个满足就返回true
print(res);
every
List list = [1, 2, 3, 4, 5, 7, 8];
var newList = list.every((element) => element > 5); // 只有全部满足才返回true
print(newList);
Set
var s = new Set();
s.addAll([1, 2, 3, 4, 5]);
s.forEach((element) => print(element));
Map
var p = {"name": "Maojiu", "age": 18, "sex": "男"};
p.forEach((key, value) {
print('${key}---${value}');
});