入口方法
方式一
main() {
print('你好dart');
}
方式二
//表示main方法没有返回值
void main() {
print('你好dart');
}
变量
dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推导
变量定义
dart中定义变量可以通过var关键字也可以通过类型来申明变量。
var str='this is var';
String str='this is var';
int str=123;
注:var定义的变量会自动进行类型推导,dart中的变量是强类型的
变量命名规则
与大多数语言相同,变量命名需要遵守以下条件:
- 变量名称必须由数字、字母、下划线和美元符($)组成。
- 注意:标识符开头不能是数字
- 标识符不能是保留字和关键字。
- 变量的名字是区分大小写的如: age和Age是不同的变量。在实际的运用中,也建议,不要用一个单词大小写区分两个变量。
- 标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
常量
Dart中的 常量使用 final 和 const来定义。
- const值不变 一开始就得赋值
- final 可以开始不赋值 只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化
数据类型
dart支持如下类型:
- int:整形
- double:双精度浮点型
- String:字符串
- bool:布尔
- List:列表,数组
- Maps:字典,键值对
字符串
字符串可以使用 单引号 双引号 和 三引号定义
main() {
var a = '单引号""';
var b = "双引号''";
var c = '''
三引号,
三引号里可以有单引号'',和双引号"",不能再有三引号
''';
print(a);
print(b);
print(c);
}
print
只能输出一个变量,有点跟console.log
混了
字符串的拼接
数值类型
int类型的值可以转换成double类型,double类型不可以转成int类型
double a = 1; 正确
int b = 1.2; 错误
list数组
方式1:不指定类型
main() {
var a = ['a', 1, false];
print(a); //[a, 1, false]
print(a[0]); // a
print(a.length); //3
}
方式2:指定类型
main() {
var a = <int>[1, 2, 3];
var b = <String>['a'];
print(a);
print(b);
}
方式3:,通过[]创建的集合它的容量可以变化
main() {
//指定具体类型的
var a = <int>[];
print(a); // []
print(a.length); //0
a.add(1);
print(a); //[1]
//未指定具体类型的
var b = [];
print(b); //[]
print(b.length); //0
b.add(1);
b.add('a');
print(b); //[1,a]
//存在值的,只能添加同类型的值
//例如最初全是整形,会默认为整形数组,添加时就只能添加整形
var c = [1, 2, 'a'];
c.add('c');
print(c); // [1,2,a,c]
}
Maps 字典
方式1
main() {
var a = {
'name': '张三', 'age': 15}; //key也必须加引号,不能项js一样不加引号
print(a); //{name: 张三, age: 15}
print(a['name']); //张三
}
方式2
main() {
var p = new Map();
p["name"] = "李四";
p["age"] = 22;
p["work"] = ["程序员", "送外卖"];
print(p); // {name: 李四, age: 22, work: [程序员, 送外卖]}
print(p["age"]); // 22
}
类型判断
dart中使用is关键词判断类型
main() {
String a = '1';
print(a is int); // false
int b = 1;
print(b is double); // false
double c = 1.0;
print(c is int); // false
var d = 1;
print(d is int); // true
}
运算符
与主流语言相同,比如Java、JavaScript。
类型转换
dart是强类型的语言,类型转换只支持Number类型转换成String类型和String类型转成Number类型
Number类型转换成String类型
var myNum=12;
var str=myNum.toString();
print(str is String);
String类型转成Number类型
String str='123';
var myNum=int.parse(str);
print(myNum is int);
String str='123.1';
var myNum=double.parse(str);
print(myNum is double);
循环
和c语言没什么区别,包括for循环、while循环、do while循环
for循环
for (int i = 1; i<=100; i++) {
print(i);
}
while循环
main() {
int a = 1;
while (a < 5) {
print(a);
a++;
}
}
do while
main() {
int a = 1;
do {
print(a);
a++;
} while (a < 5);
}
break 和 continue
略
List常用属性和方法
属性
length 长度
var a = [11, 'a'];
print(a.length); // 2
reversed 翻转
var a = [11, 'a'];
print(a.reversed); // (a,11)
isEmpty 是否为空
var a = [11, 'a'];
print(a.isEmpty); // false
isNotEmpty 是否不为空
var a = [11, 'a'];
print(a.isNotEmpty); // true
first和last 第一个和最后一个
var a = [1, 2, 3];
print(a.first); //1
print(a.last); //3
方法
add 增加
var a = [];
a.add(1);
print(a); // [1]
addAll 拼接数组
var a = [1];
var b = [2];
var c = [3];
a.addAll(b);
print(a); // [1,2]
注:
1、不能拼接自身
2、只能拼接一个数组
indexOf 查找 ,返回第一个符合匹配的下标
var a = [1, 'a', '1'];
print(a.indexOf('1')); // 返回下标 2
print(a.indexOf(2)); // 找不到返回 -1
参数1是要查找的值;参数2可选,是起始位置。
indexWhere():查找
与indexOf
类似,但是更高级,返回符合条件的元素下标。类似于JavaScript中的findIndex
var a = ['ab', 'bc', 'bd'];
print(a.indexWhere((element) => element.startsWith('b'))); // 1
remove 删除 传入具体值
var a = [1, 'a', '1'];
a.remove('a');
print(a); // [1,1]
print(a[1] is int); // false
removeAt 删除 传入索引值
fillRange 修改
var a = [1, 'a', '1'];
a.fillRange(0, 2, 'new');
print(a); // [new, new, 1]
参数1是起始下标,参数2是终止下标。参数3是要改成的值。包括起始不包括终止。
注意:当起始下标不存在时,运行会报错。
insert(index,value); 指定位置插入
var a = [1, 'a'];
a.insert(0, 'new');
print(a); //[new, 1, a]
insertAll(index,list) 指定位置插入List
var a = [1];
a.insertAll(1, [1, 2, 3]);
print(a); //[1, 1, 2, 3]
上述也可以通过+
来实现
var a = [1];
print(a + [2, 3]); // [1,2,3]
print(a + [1,[2]]); //错误,var具有默认类型推断功能
fill 填充
var a = new List.filled(2, [], growable: true);
print(a); // [[], []]
a[0].add(1);
print(a); //[[1], [1]]
a.add([3]);
print(a); //[[1], [1], [3]]
var b = new List.filled(2, [], growable: false);
print(b);
b[0].add(1);
print(b);
b.add([3]);
print(b); //报错
var c = new List.filled(2, [], growable: true);
print(c); // [[], []]
c[0] = [2];
print(c); //[[2], []]
注:
1、growable是否可以扩展,为true时这个list可以继续扩展;为false时不允许扩展
2、file的填充是共享填充,如果使用add进行添加时,其他项也会被添加
3、不想共享填充可以直接进行赋值操作
join() List转换成字符串
同JavaScript中的join()
clear 清空List
遍历
for
略
for in
for(var item in myList){
print(item);
}
forEach
略
map
略
every
略
any
略
where
List myList = [1, 3, 4, 5, 7, 8, 9];
var newList = myList.where((value) {
return value > 5;
});
print(newList); // (7,8,9)
print(newList is List); //false
print(newList.toList()); //[7,8,9]
print(newList.toList() is List); // true
toList:转化为List
Set
Dart 里面的Set它最主要的功能就是去除数组重复内容。
Set是没有顺序且不能重复的集合,所以不能通过索引去获取值。可以先通过toList
转成list,再根据索引取值。
var a = new Set();
a.add('香蕉');
a.add('苹果');
a.add('苹果');
print(a); //{香蕉, 苹果}
print(a.toList()); //[香蕉, 苹果]
List myList = ['香蕉', '苹果', '西瓜', '香蕉', '苹果', '香蕉', '苹果'];
var s = new Set();
s.addAll(myList);
print(s); //{香蕉, 苹果, 西瓜}
s.remove('香蕉');
print(s.toList()); //[苹果, 西瓜]
Set支持不需要索引的List方法
Maps
定义
//第一种方式
Map person = {
"name": "张三", "age": 20};
print(person);
//第二种方式
var m = new Map();
m["name"] = "李四";
print(m);
//第三种
var a = {
'name': '张三'};
print(a);
//第四种,指定泛型
var a = <String, int>{
'age': 2};
print(a);
常用属性
- keys 获取所有的key值
- values 获取所有的value值
- isEmpty 是否为空
- isNotEmpty 是否不为空
常用方法
remove(key) 删除指定key的数据
addAll({…}) 合并映射 给映射内增加属性
var person = {
"name": "张三", "age": 20, "sex": "男"};
person.addAll({
"work": ['敲代码', '送外卖'],
"height": 160
});
print(person);
containsKey和containsValue
//第四种,指定泛型
var a = <String, int>{
'age': 2};
print(a.containsKey('a')); //是否包含键a
print(a.containsValue(2)); //是否包含值2
遍历
forEach、map、where、any、every。类似于List的用法