数据类型

2-1变量与常量

使用var生命变量 未初始化默认为null
void 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);
}

yujiao
23 声望6 粉丝