2 - Dart 基础类型

466 阅读1分钟

基础类型

number

dart 下的 number 一共有三种:int / double / num
num 相对 int, double 更加宽松,就如同 typeScriptnumber 一样。
num 类型能直接装载 intdouble 的值,而 intdouble 则需要 num 进行转换才能装载

// num 相对 int,double 更加宽松,就如同 typeScript 的 number 一样
int n1 = 1;
double n2 = 1.0;

num n3 = 1;
num n4 = 1.0;

// num 类型能直接装载 int 和 double 的值
num n5 = n1;
num n6 = n2;

// int 和 double 则需要转换才能装载
int n7 = n5.toInt();
double n8 = n5.toDouble();

bool

如同第一章说的,dart 内所有的类型的默认值都是 null,就算 bool 也不例外。
而且和 javaScript 不一样,在 dart 的 条件判断中,都需要使用 bool

bool b1; // 默认值是 null
b1 = true;
// if 内的条件一定要是 bool 值
if (b1) {}

String

dartString 设置的非常简单,如果你会 javaScript ,稍微适应一下就可以了

  • 基础
    String s1 = "test";
    String s2 = 'test';
    // 拼接
    String s3 = "test" + s1 + s2; // 加号拼接(能使用变量)
    var s4 = "test" "test"; // 空格拼接 (不能使用变量)
    // 转义
    var s5 = "test \n test";
    var s6 = r"test \n test"; // 取消转义
    // 换行
    var s7 = '''test1
    test2
    test3
    ''';
    // 模版语法:相对 `javaScript` 不需要反引号和大括弧
    var s8 = '$s1 test $s2';
    
  • 部分 API
    //部分 API
    var s9 = '  hello wold  ';
    // 查找内容
    s9.contains('a');
    s9.startsWith('a');
    s9.endsWith('b');
    s9.indexOf('b');
    // 替换
    s9.replaceFirst("e", "b");
    s9.replaceAll("e", "b");
    // 截取
    s9.substring(0, 2);
    s9.split("/");
    s9.trim();
    // StringBuffer .. 语法可以先忽略
    var s10 = StringBuffer()
      ..write("312321")
      ..write("dsadsads")
      ..writeAll([32121, 321312]);
    
  • 转换
    int num1 = 12;
    var string1 = '$num1';
    var string2 = num1.toString();
    // string to number
    int num2 = int.parse(string1);
    num num3 = num.parse(string1);
    double num4 = double.parse(string1);
    

date

日期类型功能非常多,相对以前用 javaScript 来说,很多日期的坑都没有了。还有很多实用的 API 可以调用。

  • 创建
    var d1 = DateTime(2021, 4, 2);
    var d2 = DateTime.now();
    // 通过时间戳创建时间
    var d3 = DateTime.fromMillisecondsSinceEpoch(1633097335)
    
  • 获取时间戳
      var ts1 = d1.microsecondsSinceEpoch;
      var ts2 = d1.millisecondsSinceEpoch;
    
  • 其他
    d1.add(new Duration(minutes: 5)); // 增加时间
    d1.isAfter(d2); //谁在谁之后
    d1.isAtSameMomentAs(d2); // 是否相同时间
    var diff = d1.difference(d2);  // 获取两个时间点的之间的时间段
    

enum

枚举没什么好说的,不过写习惯了 swift 的话,可能会觉得很憋屈,很多神奇的功能都没有了,只是一个简单的枚举类型

enum Status { loading, success, error }

List / Map / Set

javaScript 类比一下, List 就是数组,而 MapSet 则和 ES6mapset 意义差不多。一个是 key-value 的数据结构,一个是不可重复的数组。这三个集合类型我们都按照,定义 - 增删改查 - 重要属性和方法 的模式来学习。 主要说一下需要注意的几点:

  • 三者的创建都能指定类型,如同 List<int> , Map<String, String>()Set<int>() 。这种是泛型是使用,后面会专门说一下泛型。
  • List 初始化的时候是分 固定长度不固定长度 的。
  // List
  // 1. 定义
  List list1 = []; // 不固定长度
  List list2 = List.filled(5, 0); // 固定长度
  List<int> list3 = []; // 指定类型

  // 2. 增删改查
  list3.add(1);
  list3.add(2);
  list3.add(3);
  list3.insert(3, 4);
  list3.insertAll(4, [5, 6]);

  list3.removeAt(0); // 按照位置删除删除第一个
  list3.remove(2); // 按照内容删除
  // list3.clear() //删除所有
  list3[0] = 11;
  var index = list3.indexOf(11); // 查询
  print(list3);

  //3. 重要属性和方法
  // 排序
  list3.sort();
  print(list3);
  // 合并
  var ls = list2 + list3;
  print(ls);
  // 属性
  print(ls.first);
  print(ls.last);
  print(ls.length);
  print(ls.reversed);
  print(ls.isEmpty);
  print(ls.isNotEmpty);

  // Set 和数组差不多,但是不会有重复值
  // 1. 定义
  // var s = Set();
  var s = Set<int>(); //限制类型的
  // 2. 增删
  s.add(1);
  s.add(2);
  s.add(3);
  s.add(1); // 重复的值不会再添加

  s.remove(1);
  // s.removeAll([2, 3]);
  // s.clear();

  print(s);

  var s1 = Set();
  s1.add(2);
  s1.add(3);
  s1.add(4);

  //3. 重要属性和方法
  // 交集:两个 Set 都有的值会重新组合成一个 set
  var s2 = s1.intersection(s);
  print(s2);
  // 合并: 两个 Set 合并
  var s3 = s1.union(s);
  print(s3);

  // Map
  // 1. 定义
  // var m = Map();
  var m = Map<String, String>();
  // 2. 增删改查
  m['name'] = "testName";
  m.addAll({"local": "shenzhen"});
  m.addAll({"test": "value"});

  m.remove("local");
  m.removeWhere((key, value) => key == 'name');
  // m.clear();

  m.update("name", (value) => "test2");
  m.updateAll((key, value) => "($value)");

  // 3. 重要属性和方法
  print(m.isEmpty);
  print(m.isNotEmpty);
  print(m.length);
  print(m.keys);
  print(m.values);