美文网首页
Dart 2 (二) 数据类型

Dart 2 (二) 数据类型

作者: pstommy | 来源:发表于2018-09-12 14:52 被阅读0次

    数据类型

    Dart中支持以下数据类型:

    • Numbers
    • Strings
    • Booleans
    • List(数组)
    • Maps(字典)

    Number 类型

    int 类型 (范围:-2^63 - 2^63 - 1 ; 打包成JavaScript的范围 -2^53 to 2^53 - 1)

    int x = 1;
    int hex = 0xDEADBEEF;
    

    double 类型

    double y = 1.1;
    double exponents = 1.42e5;
    

    以上两种类型都是number的子类,可以参与+ - * /等运算
    int 类型的位运算符和传统惯例一致:

    assert((3 << 1) == 6); // 0011 << 1 == 0110
    assert((3 >> 1) == 1); // 0011 >> 1 == 0001
    assert((3 | 4) == 7); // 0011 | 0100 == 0111
    

    Strings类型

    Dart字符串是UTF-16编码单元的序列。可以使用单引号或双引号创建一个字符串

    //字符串赋值的时候,可以使用单引号,也可以使用双引号
     var str1 = "Ok?";
    
     String str2 = "It's ok!";//类型声明
    
      //如果使用的是双引号,可以内嵌单引号
      //当然,如果使用的是单引号,可以内嵌双引号,否则需要“\”转义
      //String str2 = ‘It\’s ok!’;
      String str2 = "It's ok!";
      
      //使用三个单引号或者双引号可以多行字符串赋值
      var str3 = """Dart Lang
      Hello,World!""";
      
      //在Dart中,相邻的字符串在编译的时候会自动连接
      //这里发现一个问题,如果多个字符串相邻,中间的字符串不能为空,否则报错
      //但是如果单引号和双引号相邻,即使是空值也不会报错,但相信没有人这么做
      //var name = 'Wang''''Jianfei'; 报错
      var name = 'Wang'' ''Jianfei';
      
      //assert 是语言内置的断言函数,仅在检查模式下有效
      //如果断言失败则程序立刻终止
      assert(name == "Wang Jianfei");
      
    /*********连接字符串 插值**********/  
      //还可以使用“$”插入变量的值  
      var s = 'string interpolation';
    
      assert('Dart has $s, which is very handy.' ==
        'Dart has string interpolation, ' +
            'which is very handy.');
      assert('That deserves all caps. ' +
            '${s.toUpperCase()} is very handy!' ==
        'That deserves all caps. ' +
            'STRING INTERPOLATION is very handy!');
     
     /***************字符串拼接******************/
     // 你可以连接字符串使用相邻字符串文字或+运算符
     var s1 = 'String '
        'concatenation'
        " works even over line breaks.";
      assert(s1 =='String concatenation works even over ''line breaks.');
    
      var s2 = 'The + operator ' + 'works, as well.';
      assert(s2 == 'The + operator works, as well.');
    
      
      //声明原始字符串,直接在字符串前加字符“r”
      //可以避免“\”的转义作用,在正则表达式里特别有用
      print(r"换行符:\n");
      var s = r'In a raw string, not even \n gets special treatment.';
            
      // 以下是常量运行
      const aConstNum = 0;
      const aConstBool = true;
      const aConstString = 'a constant string';
    
      //上面提到的字符串插值,还可以插入表达式:${}
      print("整型转换为16进制:$hex —> 0x${hex.toRadixString(16).toUpperCase()}");
    

    Number与String类型之间的转换

    // String -> int
    var one = int.parse('1');
    assert(one == 1);
    
    // String -> double
    var onePointOne = double.parse('1.1');
    assert(onePointOne == 1.1);
    
    // int -> String
    String oneAsString = 1.toString();
    assert(oneAsString == '1');
    
    // double -> String
    String piAsString = 3.14159.toStringAsFixed(2);
    assert(piAsString == '3.14');
    

    Booleans类型

    为了表示布尔值,Dart使用了一种名为bool的类型。只有两个对象具有bool类型:布尔字面值true和false,它们都是编译时常量。

    Dart的类型安全意味着您不能使用if (nonbooleanValue)或assert (nonbooleanValue)之类的代码。相反,应该显式地检查值,如下所示:

    // 判断字符串是否为空字符串.
    var fullName = '';
    assert(fullName.isEmpty);
    
    // 检查是否为0.
    var hitPoints = 0;
    assert(hitPoints <= 0);
    
    // 检查是否为 null.
    var unicorn;
    assert(unicorn == null);
    
    // 分母是否为0
    var iMeantToDoThis = 0 / 0;
    assert(iMeantToDoThis.isNaN);
    

    List 类型

    在几乎所有编程语言中,最常见的集合可能是数组或有序对象组。在Dart中,数组是列表对象,所以大多数人只是称它们为列表。例子

    var list = [1, 2, 3];
    

    *注意:分析器推断List的类型List<int>。如果您试图向这个List添加非整数对象,分析器或运行时将引发错误。
    Lists使用从0开始的索引,其中0是第一个元素和List的索引。list.length - 1是最后一个元素的指数。你可以得到一个List的长度,并引用List元素,就像你在JavaScript:

    var list = [1, 2, 3];
    assert(list.length == 3);
    assert(list[1] == 2);
    
    list[1] = 1;
    assert(list[1] == 1);
    

    要创建一个编译时常量的List,在[]前面添加const:

    var constantList = const [1, 2, 3];
    // constantList[1] = 1; // 这样赋值将报错
    

    Map类型(映射)

    通常,映射是关联键和值的对象。键和值可以是任何类型的对象。每个键只出现一次,但是您可以多次使用相同的值。Dart提供支持由maps文字和map类型。
    这里有几个简单的Map,创建使用map文字:

    var gifts = {
      // Key:    Value
      'first': 'partridge',
      'second': 'turtledoves',
      'fifth': 'golden rings'
    };
    
    var nobleGases = {
      2: 'helium',
      10: 'neon',
      18: 'argon',
    };
    

    *分析器推断gift有type Map<String, String>和nobleGases有type Map<int, String>。如果您试图向map或runtime中添加错误的值类型,分析器或运行时将引发错误。

    您还可以使用以下方式创建Map对象:

    var gifts = Map();
    gifts['first'] = 'partridge';
    gifts['second'] = 'turtledoves';
    gifts['fifth'] = 'golden rings';
    
    var nobleGases = Map();
    nobleGases[2] = 'helium';
    nobleGases[10] = 'neon';
    nobleGases[18] = 'argon';
    

    您可能会用到new Map(),而不仅仅是Map()。在Dart 2中,new是可选的。

    向现有的Map添加一个新的键值对

    ar gifts = {'first': 'partridge'};
    gifts['fourth'] = 'calling birds'; // 增加一个键值对
    

    从Map中检索值的方法

    var gifts = {'first': 'partridge'};
    assert(gifts['first'] == 'partridge');
    

    如果您查找的键不在Map中,则返回null:

    var gifts = {'first': 'partridge'};
    assert(gifts['fifth'] == null);
    

    使用.length获得映射中键值对的数量:

    var gifts = {'first': 'partridge'};
    gifts['fourth'] = 'calling birds';
    assert(gifts.length == 2);
    

    要创建一个编译时常量的Map,在{}前添加const:

    final constantMap = const {
      2: 'helium',
      10: 'neon',
      18: 'argon',
    };
    

    更多map的用法:https://www.dartlang.org/guides/libraries/library-tour#maps

    相关文章

      网友评论

          本文标题:Dart 2 (二) 数据类型

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