美文网首页Flutter圈子Flutter
Dart常用数据类型(一)

Dart常用数据类型(一)

作者: 向日花开 | 来源:发表于2020-02-07 21:29 被阅读0次

    Number(数值类型)

    int 整形
    double 浮点型

    String (字符串类型)

    String 字符串

    Boolean(布尔类型)

    bool 布尔

    List(集合,数组类型)

    在 Dart 中大多数人都称它为列表

    Map(字典类型)

    任意类型的键值对

    数字类型(num,int double)

    int,double 类型都继承自 num 类型。

    运算符

    符号 作用
    +
    -
    *
    ~/ 取整
    % 取余
    / 获得的结果是长除法的结果
        int num = 90;
        int n = 23;
        print("num=${num}"); //90
        print("n=${n}"); //23
    
        print("============运算符============");
        print("num+n=${num + n}"); //113
        print("num-n=${num - n}"); //67
        print("num*n=${num * n}"); //2070
        print("num~/n=${num ~/ n}"); //取整,3
        print("num%n=${num % n}"); //取余,21
        print("num/n=${num / n}"); //取长除法结果,3.9130434782608696
    

    属性

    isNaN

    如果数字是非数字双精度值,则为 true;否则为 true。否则为假。

    isNegative

    是否是负数

    isEven

    是否是偶数

    isOdd

    是否是奇数

    sign

    返回该整数的符号(对于 0 返回 0,对于小于 0 的值返回 -1,对于大于 0 的值返回 1。)

        print((-9).isNaN); //false //如果数字是非数字双精度值,则为true;否则为true。否则为假。
        print((0 / 0).isNaN); //true
        print((-9).isNegative); //true//是否是小于0的数
        print((0).isNegative); //false //是否是小于0的数
        print(num.isEven); //true//是否是偶数
        print(num.isOdd); //false//是否是奇数
        print(num.sign); //1//返回该整数的符号(对于0返回0,对于小于0的值返回 -1,对于大于0的值返回 1。)
    

    方法

        print(num1.toInt()); //3//转成int类型 (舍去小数)
        print(num.toDouble()); //90.0//转成double类型
        print((-3.14).abs()); //3.14//绝对值
        print(num1.round()); //3//四舍五入
        print(num1.ceil()); //4//返回此不小于的最小整数  比如5.2, 返回的是6,+0.5再四舍五入
        print(num1.floor()); //3//返回此不大于的最大整数  比如5.2, 返回的是5
        print(num1.truncate()); //3//返回去掉小数点后面的整数
        print(num1.truncateToDouble()); //3.0
        print(3.54.truncateToDouble()); //3.0
    

    常用转换

        print(int.parse("3")); //3                //String=>int
        print(double.parse("3.14")); //3.14       //String=>double
        print(num1.toString()); //3.1314          //double=>String
        print(num1.toStringAsFixed(3)); //3.131   // double=>String
    

    字符串类型

    单引号,双引号都可以定义字符串。

    字符串拼接可以用“+”或者“{}”。

      String str1 = '字符串', str2 = "双引号"; //字符串定义
      String str3 = 'st1:$str1\tstr2:$str2'; //字符串拼接
    
      String str4 = "+号拼接:\t" + 'st1:' + str1 + '\tstr2:' + str2; //字符串拼接,'\'转义
    
      String str5 = "{}号拼接:\tst1:${str1}\tstr2:${str2}";
    
      print(str3);
      print(str4);
      print(str5);
    

    字符串常用方法

    
      String str6 = "在爱情里,不被爱的那个才是第三者。";
      print("str6.length="+str6.length.toString());//字符串长度
      print(str6.indexOf("爱"));//获取指定字符串位置,返回第一个
      print(str6.substring(1,9)); //字符串截取
      print("str6.startsWith('在爱情')=="+str6.startsWith("在爱情").toString());//判断
      print(str6.replaceAll("第三者", "你"));//字符串替换
      print(str6.split("爱").toString());//切割字符串//根据"爱"切割字符串
      print("str6.contains('在爱情')=="+str6.contains("在爱情").toString());//判断是否包含
      print("i love u".toUpperCase());//转大写
      print("I LOVE U".toLowerCase());//转小写
      print("".isEmpty);//为空判断
    
    

    bool 布尔类型

    • 使用 bool 表示布尔类型

    • 布尔值只有 true 和 false

    • 布尔类型 bool 默认值是 null

      bool success = true, fail = false;
      bool heihei;
      print(heihei);//null
      print(success);
      print(fail);
      print(success || fail); //true
      print(success && fail); //false
    
      int a = 99, b = 78, c = 210;
    
      int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
    
      print("a,b,c最大值:" + max.toString());
    

    List 集合列表

    下标从 0 开始

      List list1 = [1, 2, 3, "Hello", false];
    
      list1[2] = "世界"; //修改下标为2 的值
    
      print(list1.length); //5//列表长度
      list1.add("心跳"); //添加元素
    
      List list2 = List.generate(3, (index) {
        return index + 9;
      }); //[9,10,11]
    
      list1.addAll(list2); //添加多个元素//[1, 2, 世界, Hello, false, 心跳, 9, 10, 11]
    
      list1.insert(1, "hi"); //向指定位置插入元素
    
      print(list1);
      // 移除数组中的元素
      list1.remove("value");
      print(list1);
    
      // 移除数组中指定的元素
      list1.removeAt(1);
      print(list1);
    
      // 判断数组中是否有某个元素
      print(list1.indexOf("element")); // 输出结果:-1
    
      // 可以使用 sort() 函数来排序, 但是由于我们使用定义的数组类型不一样,就不能使用
      var list3 = [10, 22, 53, 216, 53];
    
      // 根据语法提示: List.sort([(int, int) → int compare]) → void
      list3.sort((a, b) => a.compareTo(b));
      print(list3); // 输出结果:
    
      print("============集合遍历1============");
    
      ///遍历集合的方式
      for (int i = 0; i < list3.length; i++) {
        print(list3[i]);
      }
      print("============集合遍历2============");
      for (var o in list3) {
        print(o);
      }
      print("============集合遍历3============");
      list3.forEach((val) {
        print(val);
      });
    
    

    Map 字典类型

    map 是将 key 和 value 相关联的对象,key 和 value 都可以是任何类型的对象,并且 key 是唯一的如果 key 重复后面添加的 key 会替换前面的。

      // 创建Map
      var map = {'sf': '影魔', 'viper': '冥界亚龙'};
    
      // 获取长度
      print(map.length); // 输出:2
      // 判断是否为空
      print(map.isEmpty); // 输出:false
      print(map.isNotEmpty); // 输出:true
      // 获取到所有的 key
      print(map.keys); // 输出:(sf, viper)
      // 获取到所有的 values
      print(map.values); // 输出:(影魔, 冥界亚龙)
    
      // 判断是否包含某个key
      print(map.containsKey("key")); // 输出:false
    
      // 判断是否包含某个value
      print(map.containsValue("key")); // 输出:false
    
      // 添加一个新的元素进去
      map['spa'] = '幽鬼';
      print(map); // 输出:{sf: 影魔, viper: 冥界亚龙, spa: 幽鬼}
    
      // 循环打印 代码提示:Map.forEach((String, String) → void f) → void
      map.forEach((key, value) => print("key:${key}, value:${value}"));
    

    弱类型

    Dart 中弱类型有 var, Object 以及 dynamic。

    dynamic

    动态任意类型,编译阶段不检查类型

    var

    • 如果没有初始值,可以变成任何类型
    • 如果有初始值,那么其类型将会被锁定,类型将不能被更改

    Object

    动态任意类型,编译阶段检查类型

      print('----dynamic,var,Object----');
      print('--------------------------');
      print('----dynamic----');
      dynamic x = 'hello';
      print(x.runtimeType);
      //print(x.hello()); //此处编译能通过,但是运行报错 提示Class 'String' has no instance method 'hello'.
      print(x);
      x = 123;
      print(x);
      print(x.runtimeType);
      print('----var----');
      var a = 'hello';
      // a = 123;//编译报错//你可以改变 x的类型,但是无法改变 a的类型
      print(a.runtimeType);
      print(a);
      print('----Object----');
      Object o1 = 'hello';
      print(o1.runtimeType);
      print(o1);
      o1 = 345;
      print(o1);
      print(o1.runtimeType);
    

    小结

    var 初始化确定类型后不可更改类型, Object 以及 dynamic 可以更改类型
    Object 编译阶段检查类型, 而 dynamic 编译阶段不检查类型

    最后

    贴一张自己学习Flutter的公众号,感兴趣的小伙伴可以一起学习哦。。。

    完整代码

    import 'package:flutter/material.dart';
    
    class DartDataTypePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("常用数据类型"),
          ),
          body: Center(
            child: Material(
              child: InkWell(
                onTap: () {
                  _showDataType();
                  _showStringType();
                  _showBoolType();
                  _showListType();
                  _showMapType();
                  _showSpecialType();
                },
                child: Container(
                  alignment: Alignment.center,
                  height: 50,
                  width: 200,
                  decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(5),
                      gradient: LinearGradient(colors: [
                        Theme.of(context).primaryColor.withOpacity(.5),
                        Theme.of(context).primaryColor.withOpacity(.7),
                      ])),
                  child: Text(
                    "点击运行",
                    style: TextStyle(color: Colors.white, fontSize: 16),
                  ),
                ),
              ),
            ),
          ),
        );
      }
    
      //数值类型
      void _showDataType() {
        int num = 90;
        int n = 23;
        print("num=${num}"); //90
        print("n=${n}"); //23
    
        print("============运算符============");
        print("num+n=${num + n}"); //113
        print("num-n=${num - n}"); //67
        print("num*n=${num * n}"); //2070
        print("num~/n=${num ~/ n}"); //取整,3
        print("num%n=${num % n}"); //取余,21
        print("num/n=${num / n}"); //取长除法结果,3.9130434782608696
    
        print("============属性============");
        print((-9).isNaN); //false //如果数字是非数字双精度值,则为true;否则为true。否则为假。
        print((0 / 0).isNaN); //true
        print((-9).isNegative); //true//是否是小与0的数
        print((0).isNegative); //false //是否是小与0的数
        print(num.isEven); //true//是否是偶数
        print(num.isOdd); //false//是否是奇数
        print(num.sign); //1//返回该整数的符号(对于0返回0,对于小于0的值返回 -1,对于大于0的值返回 1。)
    
        print("============方法============");
    
        double num1 = 3.1314;
    
        print(num1.toInt()); //3//转成int类型 (舍去小数)
        print(num.toDouble()); //90.0//转成double类型
        print((-3.14).abs()); //3.14//绝对值
        print(num1.round()); //3//四舍五入
        print(num1.ceil()); //4//返回此不小于的最小整数  比如5.2, 返回的是6,+0.5再四舍五入
        print(num1.floor()); //3//返回此不大于的最大整数  比如5.2, 返回的是5
        print(num1.truncate()); //3//返回去掉小数点后面的整数
        print(num1.truncateToDouble()); //3.0
        print(3.54.truncateToDouble()); //3.0
    
        print("============常用转换方法============");
    
        print(int.parse("3")); //3                //String=>int
        print(double.parse("3.14")); //3.14       //String=>double
        print(num1.toString()); //3.1314          //double=>String
        print(num1.toStringAsFixed(3)); //3.131   // double=>String
      }
    }
    
    //字符串类型
    void _showStringType() {
      String str1 = '字符串', str2 = "双引号"; //字符串定义
      String str3 = 'st1:$str1\tstr2:$str2'; //字符串拼接
    
      String str4 = "+号拼接:\t" + 'st1:' + str1 + '\tstr2:' + str2; //字符串拼接,'\'转义
    
      String str5 = "{}号拼接:\tst1:${str1}\tstr2:${str2}";
    
      print(str3);
      print(str4);
      print(str5);
    
      print("============常用方法============");
      String str6 = "在爱情里,不被爱的那个才是第三者。";
      print("str6.length=" + str6.length.toString()); //字符串长度
      print(str6.indexOf("爱")); //获取指定字符串位置,返回第一个
      print(str6.substring(1, 9)); //字符串截取
      print("str6.startsWith('在爱情')==" + str6.startsWith("在爱情").toString()); //判断
      print(str6.replaceAll("第三者", "你")); //字符串替换
      print(str6.split("爱").toString()); //切割字符串//根据"爱"切割字符串
      print("str6.contains('在爱情')==" + str6.contains("在爱情").toString()); //判断是否包含
      print("i love u".toUpperCase()); //转大写
      print("I LOVE U".toLowerCase()); //转小写
      print("".isEmpty); //为空判断
    }
    
    //Flutter中经常用到三目运算
    void _showBoolType() {
      bool success = true, fail = false;
      bool heihei;
      print(heihei); //null
      print(success);
      print(fail);
      print(success || fail); //true
      print(success && fail); //false
    
      int a = 99, b = 78, c = 210;
    
      int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
    
      print("a,b,c最大值:" + max.toString());
    }
    
    //List结合列表
    void _showListType() {
      List list1 = [1, 2, 3, "Hello", false];
    
      list1[2] = "世界"; //修改下标为2 的值
    
      print(list1.length); //5//列表长度
      list1.add("心跳"); //添加元素
    
      List list2 = List.generate(3, (index) {
        return index + 9;
      }); //[9,10,11]
    
      list1.addAll(list2); //添加多个元素//[1, 2, 世界, Hello, false, 心跳, 9, 10, 11]
    
      list1.insert(1, "hi"); //向指定位置插入元素
    
      print(list1);
      // 移除数组中的元素
      list1.remove("value");
      print(list1);
    
      // 移除数组中指定的元素
      list1.removeAt(1);
      print(list1);
    
      // 判断数组中是否有某个元素
      print(list1.indexOf("element")); // 输出结果:-1
    
      // 可以使用 sort() 函数来排序, 但是由于我们使用定义的数组类型不一样,就不能使用
      var list3 = [10, 22, 53, 216, 53];
    
      // 根据语法提示: List.sort([(int, int) → int compare]) → void
      list3.sort((a, b) => a.compareTo(b));
      print(list3); // 输出结果:
    
      print("============集合遍历1============");
    
      ///遍历集合的方式
      for (int i = 0; i < list3.length; i++) {
        print(list3[i]);
      }
      print("============集合遍历2============");
      for (var o in list3) {
        print(o);
      }
      print("============集合遍历3============");
      list3.forEach((val) {
        print(val);
      });
    }
    
    void _showMapType() {
      // 创建Map
      var map = {'sf': '影魔', 'viper': '冥界亚龙'};
    
      // 获取长度
      print(map.length); // 输出:2
      // 判断是否为空
      print(map.isEmpty); // 输出:false
      print(map.isNotEmpty); // 输出:true
      // 获取到所有的 key
      print(map.keys); // 输出:(sf, viper)
      // 获取到所有的 values
      print(map.values); // 输出:(影魔, 冥界亚龙)
    
      // 判断是否包含某个key
      print(map.containsKey("key")); // 输出:false
    
      // 判断是否包含某个value
      print(map.containsValue("key")); // 输出:false
    
      // 添加一个新的元素进去
      map['spa'] = '幽鬼';
      print(map); // 输出:{sf: 影魔, viper: 冥界亚龙, spa: 幽鬼}
    
      // 循环打印 代码提示:Map.forEach((String, String) → void f) → void
      map.forEach((key, value) => print("key:${key}, value:${value}"));
    }
    
    void _showSpecialType() {
      print('----dynamic,var,Object----');
      print('--------------------------');
      print('----dynamic----');
      dynamic x = 'hello';
      print(x.runtimeType);
      //print(x.hello()); //此处编译能通过,但是运行报错 提示Class 'String' has no instance method 'hello'.
      print(x);
      x = 123;
      print(x);
      print(x.runtimeType);
      print('----var----');
      var a = 'hello';
      // a = 123;//编译报错//你可以改变 x的类型,但是无法改变 a的类型
      print(a.runtimeType);
      print(a);
      print('----Object----');
      Object o1 = 'hello';
      print(o1.runtimeType);
      print(o1);
      o1 = 345;
      print(o1);
      print(o1.runtimeType);
    }
    
    //
    

    相关文章

      网友评论

        本文标题:Dart常用数据类型(一)

        本文链接:https://www.haomeiwen.com/subject/adtdxhtx.html