一、Dart 常用的数据类型

2022-05-21  本文已影响0人  红鲤鱼与绿鲤鱼与驴与鱼

1、数字(num、int、double)

1.1 num 类型

num类型是数字类型的父类,他即可以接受 整型 也可以接受 浮点型

  void _numType() {
    num num1 = -0.1; //num 是数字类型的父类
    num num2 = 1; //即可以是浮点类型也可以是整型
  }
1.2 int 类型

int 是num的子类,只能接收整数

  void _numType() {
    int int1 = 3; //只能是整数
  }
1.3 double 类型

double 也是 num的子类

  void _numType() {
    double d1 = 3.14; //双精度
  }

num 常用的API

  void _numType() {
    num num1 = -0.1; //num 是数字类型的父类
    num num2 = 1; //即可以是浮点类型也可以是整型
    int int1 = 3; //只能是整数
    double d1 = -3.14; //双精度
    print("num:$num1 num2:$num2 int:$int1 double:$d1");
    print(num1.abs());//求绝对值
    print(num1.toDouble());//转成 double 类型
    print(d1.toInt());//转成Int类型
    print(d1.round());//四舍五入 -3.5->-4   3.5->4  3.4->3
  }
输出结果:
num:-0.1 num2:1 int:3 double:-3
0.1
-0.1
-3
-3

2、字符串(String)

在 dart 中字符串也是可以用 单引号 或者 双引号 来表示字符串的,字符串的拼接使用 '+' 或者使用 '$' (使用这个后面也是可以跟着表达式的)

  //字符串类型
  void _stringType() {
    String str1 = '单引号', str2 = "双引号";
    String str3 = 'str1:' + str1 + ' str2:' + str2;
    String str4 = "str1:$str1 str2:$str2"; //还可以使用 ${}
    print(str3);
    print(str4);
  }

String 常用的数据类型

String 字符串的Api和java中的String基本上是差不多的

将字符串转成数字类型
    String str6 = "12s";
    print(num.tryParse(str6) ?? 0); //如果字符串没有问题就正常转换,如果不能正常转换就会返回 0
    print(num.parse(str6));//会报错

3、布尔(bool)

在dart中布尔类型使用 bool

  //布尔类型
  void _boolType(){
    bool success = true, fail = false;
    debugPrint("${success||fail}"); // true
    debugPrint("${success&&fail}"); // false
  }

4、集合(List、Map)

4.1 List 集合

先来看看 dart 语言中的集合是如何创建的?
集合的创建可以使用 [ ]generate() 方法,同时还要注意 List 的泛型,没有泛型的List可以暂时理解为 Object(其实是 dynamic 类型)
在Dart中的 List 是继承自 Iterable

  //集合 List类型
  void _listType() {
    //集合的初始化
    List<String> list = ["a", "b", "c"]; //初始化并添加元素,这里设置了泛型所以只能添加string类型
    List list2 = [1, 2, 3, "abc", "cde"]; //这里没有设置泛型所以添加任何类型的都可以
    debugPrint(list2.toString());
    debugPrint(list.toString());
    // list = list2;会报错,因为 list2 没有指定泛型那么他可以放的类型是dynamic(动态)的
    // list2=list; 这个不会报错

    //集合生成函数 generate() ,第一个参数是长度,第二个是一个高阶函数返回值是元素
    List list4 = List.generate(10, (index) => index + 1);
  
  }

List 常用的Api

List 遍历

    //使用 in 关键字
    for (var element in list2) {
      debugPrint(element.toString());
    }

    // forEach() 方法
    list2.forEach((element) {
      debugPrint(element.toString());
    });
    
    //普通的遍历方式
    for (int i = 0; i < list2.length; i++) {
      debugPrint(list2[i].toString());
    }
4.2 Map 集合

创建方式和List差不多 Map的创建使用 { } ,它也是可以有泛型或者没有泛型的

    //Map集合的创建,同样的如果不添加泛型默认的泛型是 dynamic
    Map map = {"a": 1, "b": 2, 3: "c"};
    Map<int, String> map2 = {1: "a", 2: "b"};
    Map map3 = {}; //空的Map集合

    //  添加元素
    map["d"] = 4;

添加元素使用 map["d"] = 4;

Map 常见的Api

还有下面几个觉的属性

Map 的遍历

    //使用forEach 遍历
    map.forEach((key, value) {
      debugPrint("key:$key value:$value");//打印
    });

    //使用 Map.keys(返回的是一个数组)
    for (var key in map.keys) {
      debugPrint("key:$key value:${map[key]}");
    }

5、var(任何数据类型、运行时数据类型)

dynamic 、var、Object 类型

5.1、dynamic 数据类型

这个是 dart 中的 动态数据类型,通常我们并不直接使用他,为什么?看看他的优点和缺点就知道了

    // dynamic 动态数据类型
    //优点:可以代替任何数据类型(比如某个变量只有在运行的时候才会知道他的类型)
    // 缺点:会使dart的语法检查失效,因为他是表态的语法检查

    dynamic a;
    debugPrint("类型:${a.runtimeType}");//类型:Null
    a=1;
    debugPrint("类型:${a.runtimeType}");//类型:int
    a = "";
    debugPrint("类型:${a.runtimeType}");//类型:String
    a = Object();
    debugPrint("类型:${a.runtimeType}");//类型:Object

    //a.abc();//会关闭类型检查,这里的abc()是随便写的一个方法,并且编译器不会报错
5.2、var 关键字

注意 var 是关键字,并不是数据类型,那个var 关键字是什么时候确认类型的呢?
它是在 声明变量赋值的那一刻,就决定了它是什么类型.什么意思呢?看下面的两种写法。

    // 情况一:
    var b = "abc";//在这确定了他的类型
    // b = 123;//报错,因为在声明 b 的时候就已经给他赋值了"abc" 是 String类型的

    //情况二:
    var c;//这里确定了类型。并没有给他赋值,他现在的类型是Object ,值是 null ,所以下面给他赋什么值都是可以接收的
    debugPrint(c.toString());
    c ="abc";
    c = 123;
5.3、 Object 类型

他是Dart对象的基类

    //Object 类型
    Object o1="";
    o1 = 1;
    o1.abc();//这里语法检查是会报错的,因为Object没有abc()方法
上一篇下一篇

猜你喜欢

热点阅读