特点
Dart语言支持JIT与AOT。
Dart语言采用单线程模型。
Dart语言是强类型编程语言,但是允许弱类型语言式编程。
基本语法
1.变量和常量
变量
var、object、dynamic关键字或数据类型显式声明变量。
命名规则:
- 变量名称必须由数字、字母、下划线或$组成;
- 变量名开头不能是数字;
- 变量名不能是保留字或关键字;
- 变量名区分大小写;
void main() {//隐式声明var i = "hello word";print(i);var j; //定义变量时,未指定默认值,则该变量的数据类型是可变的。// j = 100;j = "hello";print(j);//用object定义变量,重新赋值时,类型可变Object k = 1;k = "qwe";print(k);//dynamic 重新赋值,类型可变dynamic m = 10;m = "asdadasd";print(m);//显式声明//整数int age = 90;//浮点类型double d = 2;//字符串String str = "11111";
}
常量
使用final或者const定义常量。final或const定义的常量时必须初始化,初始化后的常量是只读的,不可变的。
//常量final f = 10;print(f);const cc = 101;print(cc);final String str1 = "qwewqe";final double dd = 2.7;//final是正确的 const是错误的。// const 在“=”左边,声明的值一定是编译时常量。//当const用在“=”右边时,右边对象的整个状态值在编译时完全确定,并且对象被冻结且完全不可变。final date = DateTime.now();const date1 = DateTime.now();
2.数值类型
- Number(数值类型)
dart语言中的包括int和double两种数据类型。
var a = 10;//十进制10var h = 0xA;//十六进制10var d = 2.7;//十进制浮点型2.7//除号,算出来的值是double类型的int k = 10/2;//错double k2 = 10/2;//对
- string
String str = "ha ha ha";String str2 = 'hello';//拼接String aStr = "hello";String bStr = " word";String cStr = aStr + bStr;String ddStr = "$aStr$bStr";print(aStr.indexOf("e"));//字符首次出现的位置 1print(aStr.lastIndexOf("e"));//字符最后出现的位置 1print(aStr.substring(1,3));//字符最后出现的位置 elprint(aStr.split("e"));//拆分字符串 [h, llo]print(aStr.toUpperCase());//转大写 HELLOprint(aStr.toLowerCase());//转小写 helloprint(aStr.startsWith("he"));//是否以he开头 trueprint(aStr.endsWith("lo"));//是否以lo开头 trueprint(aStr.contains("lo"));//是否包含lo trueprint(aStr.replaceAll("he", "1111"));//替换he为111 1111lloprint(aStr.compareTo("abc"));//比较字符串 1表示左边的字符串大于右边,0相等,-1 小于
3.Boolean
bool flag = false;
4.List
List names = ["张三", "李四", "王五"];List names2 = ["张三", "李四", "王五", 12];print(names.length); //长度 3print(names[1]); //李四//添加元素names.add("赵六"); //[张三, 李四, 王五, 赵六]print(names);//删除元素names.remove("李四"); //[张三, 王五, 赵六]print(names);//插入names.insert(1, 6666); //[张三, 6666, 王五, 赵六]print(names);//查找元素int i = names.indexOf(6666); // 1print(i);//将数组元素转化为由特定符号分割print(names.join("@"));//张三@6666@王五@赵六
5.Set
Dart语言中Set表示一个元素唯一且无序的集合,不能通过索引下标获取数据元素。
var s = Set();s.add(1);s.add("张三");s.add(true);//list转set,会去掉重复的元素List<int> lists = [1, 2, 3, 4, 3, 2, 5];Set ss = lists.toSet(); // {1, 2, 3, 4, 5}print(ss);
6.Map
Map person = {"id": "001", "name": "zhang san", "age": "25"};//输出所有的值print(person.values); //(001, zhang san, 25)//输出所有的键print(person.keys); //(id, name, age)//输出name的值print(person["name"]); //zhang san//添加键值对Map weight = {"weight": "120"};person.addAll(weight);print(person); //{id: 001, name: zhang san, age: 25, weight: 120}//删除键值对person.remove("name");//{id: 001, age: 25, weight: 120}print(person);
7.List、Set、Map的常用方法
forEach遍历
//遍历List list = ["苹果","南瓜","西瓜"];list.forEach((element) {print(element);});I/flutter ( 2677): 苹果
I/flutter ( 2677): 南瓜
I/flutter ( 2677): 西瓜
map遍历用于修改元素的值
List list = ["苹果", "南瓜", "西瓜"];var ll = list.map((e) {return e + "1";});print(ll);I/flutter ( 2677): (苹果1, 南瓜1, 西瓜1)
where用于过滤list或set中的数据元素,并返回一个集合。
//保留大于3的值List list = [100, 1, 0, 2, 300, 150];var ll = list.where((element) {return element > 3;});print(ll);I/flutter ( 2677): (100, 300, 150)
any用于判断list或set中的数据元素只要有一个满足条件,返回值为true。
List list = [100, 1, 0, 2, 300, 150];var has = list.any((element) {return element > 10;});print(has);var has1 = list.any((element) {return element > 1000;});print(has1);I/flutter ( 2677): true
I/flutter ( 2677): false
every用于判断list或set中的数据元素全部满足条件,返回值为true。
List list = [100, 1, 0, 2, 300, 150];var f = list.every((element) {return element > 100;});print(f);var f2 = list.every((element) {return element > -1;});print(f2);I/flutter (20829): false
I/flutter (20829): true