乐趣区

dart数据类型和运算符

数据类型

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);
}
退出移动版