数据类型
2-1变量与常量
使用var生命变量 未初始化默认为nullvoid main() { // 既可以赋值数字也可以字符串 var a; // 打印出null 由于声明未赋值 print(a); a = 10; // 打印出10 print(a); // 打印出字符串hello dart a = 'hello dart'; print(a); // 既可以声明的时候赋值 也可以声明后赋值 打出20 var b = 20; print(b); // final c = 30; // final只能赋值一次的变量 不能继续赋值了 // c=50; print(c); // const声明常量 必须是编译器常亮 const d = 20; // 常亮也是不能修改的 // d=50; print(d);}
2-2数值型
void main() { // num是数值型的总称 包括浮点型(带小数点)和整形 num a = 10; a = 12.5; print(a); int b = 20; // double的值不能赋给int // b=20.5 print(b); double c = 10.5; print(b + c); print(b - c); print(b * c); print(b / c); // 取整 1 20除以10.5取了整就是1 print(b ~/ c); // 取余 9.5 print(b % c); // 非数字 定义在double方法中 0.0/0.0=NAN print(0.0 / 0.0); // 打印b是否为偶数true print(b.isEven); // 打印b是否为奇数false print(b.isOdd); int e = -100; // abs()方法取绝对值 print(e.abs()); double f = 10.5; // 四舍五入11 print(f.round()); // 向下取整10 print(f.floor()); // 向上取整11 print(f.ceil()); // 转化为整形10 print(f.toInt()); // 转化为浮点型10.5 print(f.toDouble());}
2-3字符串
void main() { // String str1 = 'hello'; // 三个引号代表打印多行字符串 或者三个双引号 String str2 = '''hello dart'''; print(str2); // \n换行 String str3 = 'hello \n dart'; print(str3); // 字符串前面加个r可以避免字符被转义 打出hello \n dart String str4 = r'hello \n dart'; print(str4); String a1 = 'this is my fav lan'; // + this is my fav lannew print(a1 + 'new'); // *代表打印5次 print(a1 * 5); // 比较两字符串是否相同 print(str3 == a1);// 取字符串第几位 print(a1[0]); int a = 1; int b = 2;// 插值表达式 ${}可以转义为计算a+b的值 a+b=3 print('a+b=${a + b}');// 如果插值表达式直接取变量值 就可以把大括号省略掉 print('a=$a'); // 取字符串长度 print(a1.length); // 判断字符串是否为空 print(a1.isEmpty); // 是否包含某个字符串 print(a1.contains('this')); // 从0开始截取3位 print(a1.substring(0, 3)); // 是否是以a开头的 false print(a1.startsWith('a')); // 是否已a结尾 print(a1.endsWith('a')); // 第一个i对应的下标 print(a1.indexOf('i')); // 最后一个i对应的下标 print(a1.lastIndexOf('i')); // 去前后的空格 left right可以单独去 print(a1.trim()); // 大写 print(a1.toUpperCase()); // 以空格进行分隔 返回数组 var a2 = a1.split(' '); print(a2); // 替换 print(a1.replaceAll('this', 'that'));}
2-4布尔型
void main() { // 声明方法 只有true或者false bool a = true; bool b = false; print('hello'.isEmpty);}
2-5列表
void main() { // list元素可以是不同类型的 var list1 = [1, 2, 3, 'dart', true]; print(list1); // 取第0个元素 print(list1[0]); // 更改第1个元素 list1[1] = 'hello'; print(list1); // 内容不可变的list var list2 = const [1, 2, 3]; // 报错 不能修改常量数组 // list2[0]=5; // list的创建 var list3 = new List(); // 打印[] print(list3); var a = ['heloo', 'dart'];// 长度 print(a.length);// 最后一位插入元素 a.add('new'); print(a);// 在第二个元素插入字符串 a.insert(1, 'java'); print(a);// 在数组中移除元素 a.remove('java'); print(a);// 清空数组// a.clear(); print(a);// 是否包含某个元素 包含的话会打出元素下标 不包含打出-1 print(a.indexOf('dart')); print(a.indexOf('dart1'));// 按字母或者数值进行排序 [dart, heloo, new] a.sort(); print(a);// 从第二个元素开始截取[heloo, new] print(a.sublist(1));// 把元素逐个打印 传入的是一个方法 a.forEach(print);}
2-6Map
void main() { // 每一组元素都有键和值true:'2'不建议这样做 var map1 = {"first": "dart", 1: true, true: '2'}; print(map1); // 打印key=first的value值 dart print(map1['first']); print(map1[true]); // 修改map值 map1[1] = false; print(map1); var map2 = const {1: 'dart', 2: 'java'}; // 不能给不可变得map修改值 // map2[1]='1'; // 初始化 var map3 = new Map(); var a = {'first': 'dart', 'second': 'java', 'third': 'ph'}; // 长度 print(a.length); print(a.isEmpty); print(a.isNotEmpty); //(first, second, third) print(a.keys); // (dart, java, ph) print(a.values); // 是否包含某个key print(a.containsKey('first'));// 是否包含某个value print(a.containsValue('a'));// 移除key=third的那一项 a.remove('third'); print(a);// 传入一个方法 方法用插值表达式 取$key $value 结果:key=first,value=dart key=second,value=java a.forEach(f);// list转成map 下标作为key 元素作为值 var list = ['1', '2', '3']; print(list.asMap());}void f(key, value) { print('key=$key,value=$value');}
2-7dynamic
void main() { // a是动态类型 所以可以赋予不同的值 var a; a = 10; a = 'dart'; // 声明动态类型 new List<dynamic>();创建一个泛型 list中的类型随意 dynamic b = 20; b = 'java'; var list = new List<dynamic>(); list.add(1); list.add('hello'); list.add(true); print(list);}
运算符
3-1算数运算符
void main() { int a = 10; int b = 20; print(a + b); print(a - b); print(a * b); print(a / b); print(a ~/ b); print(a % b); // 先使用a的值进行打印方法 再去给a加1 10 print(a++); // 先进行+1 再把a的值传入print方法打印 12 print(++a); // 12 先操作 再减1 print(a--); // 10 print(--a);}
3-2关系运算符
void main() { int a = 5; int b = 3; // 判断内容是否相等 不判断类型 print(a == b); print(a != b); print(a > b); print(a < b); print(a >= b); print(a <= b); String a1 = '111'; String b1 = '321'; print(a1 == b1);}
3-3逻辑运算符
void main() { bool ist = true; bool isf = false; print(!ist); // &&都为true才为true print(ist && isf); // ||一个为真就真 print(ist || isf); // String a; // 声明后不赋值不能判断 为null // print(a.isEmpty); String a = ''; // true print(a.isEmpty); // false print(!a.isEmpty);}
3-4赋值运算符
void main() { int a = 10; int b = 5; // b??=10; b没有值会赋值 有值则无效 b ??= 10; // 5 print(b); // 12 a += 2; print(a); // 7 a -= 5; print(a);// 相当于a*b=? 35 print(a *= b);// 7 print(a ~/= b);// 2 print(a %= b);// print(a/=b);}
3-5条件表达式
void main() { int gender = 0; // 三目运算符 // String a=gender==0?'male':'female'; String a = gender == 0 ? 'male=$gender' : 'female=$gender'; print(a); String b; String c = 'java';// b如果为空把c给b String d = b ?? c; print(d);}