Dart 基本数据类型

2022/9/21 Dart基础

本文介绍Dart的基本数据类型。

# 变量

  • 弱类型
    • var如果没有初始值,可以变成任何类型,但是如果有初始值将被锁定类型。

      var声明后默认是null,一般在不明确类型的时候使用。

      var a;
      a = '123';
      a = 123;
      a = {
        name: '张三'
      };
      
      1
      2
      3
      4
      5
      6
    • Object动态任意类型,编译阶段检查类型
      Object a = 123;
      a = '123';
      a.x();
      
      1
      2
      3
    • dynamic动态任意类型,编译阶段不检查类型
      dynamic a = 123;
      a = '123';
      a.x();
      
      1
      2
      3
  • 强类型
    • 声明类型, 声明之后类型将被锁定
      • num 数字
      • int 整型
      • double 浮点
      • bool 布尔
      • String 字符串
      • StringBuffer 字符串 buffer
      • DateTime 时间日期
      • Duration 时间区间
      • List 列表
      • Sets 无重复队列
      • Maps kv 容器
      • enum 枚举

# 常量

类型声明可以省略,并且初始化后不能在赋值。

  • final适用于初始化成员变量
    final a = 123;
    final b = [1, 2, 3];
    
    1
    2
  • const适用于定义全局变量
    const a = 123;
    const b = [1, 2, 3];
    
    1
    2
  • finalconst区别
    • final不会在内存中重复创建,const声明相同的变量会在内存中重复使用

    • // identical比较两个引用的是否是同一个对象判断是否相等
      final a = [1, 2, 3];
      final b = [1, 2, 3];
      print(identical(a, b)); // false
      
      const a = [1, 2, 3];
      const b = [1, 2, 3];
      print(identical(a, b)); // true
      
      1
      2
      3
      4
      5
      6
      7
      8

# 数值

  • int

    • 比较两个引用的是否是同一个对象判断是否相等
  • double

    • 64-bit (双精度) 浮点数,符合 IEEE 754 标准。
  • num

    • int 和 double 都是 num 的子类。
  • 十六进制

    int b = 0xE;
    print(b);
    
    [14]
    
    1
    2
    3
    4
  • 数值转换

    // string -> int
    int a = int.parse('123');
    
    // string -> double
    double b = double.parse('1.223');
    
    // int -> string
    String a = 123.toString();
    
    // double -> string
    String b = 1.223.toString();
    
    // double -> int
    double a = 1.8;
    int b = a.toInt();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

# 布尔

  • 声明
    bool a;
    print(a);
    
    1
    2
  • 判断
    • 只有true才会判断为真,其他所有的都是false

    • bool a = true;
      print(a);
      
      String b = '';
      if (b.isEmpty) {
        print('b是空的');
      }
      
      String c = '123';
      if (c.isNotEmpty) {
        print('c不是空的');
      }
      
      final d = [1];
      print(d.isEmpty);
      
      // 打印结果
      // true b是空的 c不是空的 false
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18

# 字符串

  • 声明

    String a = 'a';
    String b = "b";
    
    1
    2
  • 字符串模板

    var a = 'abc';
    String b = 'ducafecat : ${a}';
    print(b);
    
    1
    2
    3
  • 字符串链接

    var a = 'hello'
    ' '
    'ducafecat';
    
    var a = '''
    hello word
    dart
    ''';
    print(a);
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 取消转义

    var a = r'hello word \n dart';
    print(a);
    
    1
    2
  • 字符串创建

    var sbuffer = StringBuffer();
    sbuffer..write('hello word!')
    ..writeAll(['', 'dart']);
    print(sbuffer);
    print(sbuffer.toString());
    
    1
    2
    3
    4
    5

# 日期、时间

  • 声明

    • 获取当前时间

      var now = DateTime.now();
      print(now);
      
      1
      2
    • 获取指定时间

      var d = DateTime(1996, 1, 1);
      print(d);
      
      1
      2
  • 时间增减量

    var d = DateTime(1996, 1, 1);
    
    print(d.add(Duration(days: 1)));
    print(d.add(Duration(days: -1)));
    
    1
    2
    3
    4
  • 时间比较

    var d1 = DateTime(2022, 11, 3);
    var d2 = DateTime(2022, 11, 2);
    // d1是否在d2之后
    print(d1.isAfter(d2));
    // d1是否在d2之前
    print(d1.isBefore(d2));
    
    1
    2
    3
    4
    5
    6
  • 时间差

    var d1 = DateTime(2022, 1, 1);
    var d2 = DateTime(2022, 1, 2);
    var difference = d1.difference(d2);
    print([difference.inDays, difference.inHours, difference.inMicroseconds]);
    
    1
    2
    3
    4
  • 时间戳

    var now = DateTime.now();
    print(now.millisecondsSinceEpoch);
    print(now.microsecondsSinceEpoch);
    
    1
    2
    3

# 列表

  • 声明

    • 自动

      var a = [1, 2, 3];
      print(a);
      
      List<String> b = [];
      b
        ..add('123')
        ..add('234');
      print(b);
      
      1
      2
      3
      4
      5
      6
      7
      8
    • 指定长度

      var c = List<num>.filled(3, 0);
      c[2] = 2;
      print(c);
      
      1
      2
      3
    • 迭代器生成数据

      var d = List<String>.generate(10, (index) => ('张三$index'));
      print(d);
      
      1
      2
  • 方法

    • 添加

      var a = [1, 2, 3];
      a
        ..add(1)
        ..addAll([1, 2, 3]);
      
      1
      2
      3
      4
    • 插入

      var a = [1, 2, 3];
      a
        ..insert(0, 100)
        ..insertAll(1, [200, 200]);
      
      1
      2
      3
      4
    • 查询

      var a = [1, 2, 3];
      print(a.indexOf(2));
      print(a.indexOf(5));
      
      1
      2
      3
    • 按条件查询

      var a = [1, 2, 3];
      print(a.indexWhere((item) => item == 2));
      
      1
      2
    • 删除

      var a = [1, 2, 3, 4, 5];
      print(a); // [1, 2, 3, 4, 5]
      
      a.remove(1);
      print(a); // [2, 3, 4, 5]
      
      a.removeAt(1);
      print(a); // [2, 4, 5]
      
      a.removeRange(0, 1);
      print(a); // [4, 5]
      
      a.removeWhere((element) => element == 5);
      print(a); // [4]
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
    • 洗牌

      var a = [1, 2, 3, 4, 5];
      print(a); // [1, 2, 3, 4, 5]
      a.shuffle();
      print(a); // [5, 3, 2, 1, 4]
      
      1
      2
      3
      4
    • 填充

      var a = [1, 2, 3, 4, 5];
      a.fillRange(0, 2, 100);
      print(a); // [100, 100, 3, 4, 5]
      
      1
      2
      3
    • 排序

      var a = [1, 2, 3, 4, 5, 2];
      a.sort();
      print(a); // [1, 2, 2, 3, 4, 5]
      
      1
      2
      3
    • 合并

      必须是相同类型数据合并。

      var a = [1, 2, 3, 4, 5, 2];
      var b = [123];
      print(a + b); // [1, 2, 3, 4, 5, 2, 123]
      
      1
      2
      3
    • 复制

      var a = [1, 2, 3, 4, 5, 2];
      var b = a.sublist(0, 3);
      print([a, b]);
      
      1
      2
      3

# Map

  • 声明

    • 任意

      var a = {'name': '张三', 'age': 12};
      
      1
    • 强类型

      var b = <String, int>{};
      
      1
  • 方法

    • 新增单个属性

      var b = <String, int>{};
      b['第一天'] = 123;
      b['第二天'] = 456;
      b.addAll({'第三天': 789});
      
      1
      2
      3
      4
    • 新增整个Map

      var b = <String, int>{};
      var c = {'第四天': 110};
      b.addEntries(c.entries);
      
      1
      2
      3
    • 检查是否存在Key

      var b = <String, int>{};
      print(b.containsKey('第四天'));
      
      1
      2
    • 检查是否存在Value

      var b = <String, int>{};
      print(b.containsValue(110));
      
      1
      2
    • 更新

      var b = <String, int>{};
      b.update('第一天', (value) => value + 120);
      
      1
      2
    • 删除

      var b = <String, int>{};
      b.remove('第四天');
      
      1
      2
    • 清空

      var b = <String, int>{};
      b.clear();
      
      1
      2

# Set

  • 声明

    • 任意

      var a = Set();
      var a = <dynamic>{};
      
      1
      2
    • 强类型

      var b = Set<num>();
      var b = <num>{};
      
      1
      2
  • 输出列表

    var l = [1, 2, 3, 4, 1, 2, 3, 4];
    var s = <num>{};
    s.addAll(l);  // {1, 2, 3, 4}
    s.toList(); // [1, 2, 3, 4]
    
    1
    2
    3
    4
  • 方法

    • 添加
    a.add('value');
    b.addAll([1, 2, 3]);
    
    1
    2
    • 查询
    print(b.contains(2));
    
    1
    • 交集
    var b = <num>{1, 2, 3};
    var c = <num>{1, 3, 5};
    print(b.intersection(c)); // {1, 3}
    
    1
    2
    3
    • 联合
    var c = <num>{1, 2, 3};
    var d = <num>{11, 32, 53};
    var e = <num>{100};
    print(c..union(d)..union(e)); // {1, 2, 3, 11, 32, 53, 100}
    
    1
    2
    3
    4
    • 删除
    var d = <num>{11, 32, 53};
    d.remove(11);
    
    1
    2
    • 清空
    var d = <num>{11, 32, 53};
    d.clear();
    
    1
    2

# 枚举

  • 使用场景

    一般在常量定义中使用,类型比较方便

  • enum ColorType {
      none,
      java,
      js,
      python,
      dart,
    }
    
    void main(List<String> args) {
      // 1 接收输入值 red 字符串
      var color = ColorType.java;
    
      // 3 switch 判断,打印输出
      switch (color) {
        case ColorType.java:
          print('java');
          break;
        case ColorType.js:
          print('js');
          break;
        case ColorType.python:
          print('python');
          break;
        default:
          print('其他');
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
最后更新时间: 2022/11/29 10:59:07