zoukankan      html  css  js  c++  java
  • [dart学习]第三篇:dart变量介绍 (二)

     本篇继续介绍dart变量类型,可参考前文:第二篇:dart变量介绍 (一)

    (一)finalconst类型

    如果你不打算修改一个变量的值,那么就把它定义为final或const类型。其中:final变量的值只能被设置一次,const变量是编译时常量(const是隐式final)。final变量在第一次使用时初始化。(注:类实例变量可以是final类型,但不可以是const类型)

    final类型的用法例子如下,在final关键字后,可选择是否显式声明变量类型:

    final name ='Bob';
    final String nameS = 'Jack Ma';

    通过上边的基本用法我们可以看到:不同于C语言的const,dart的final既可以作为变量修饰词,也可以作为变量类型使用

    当你试图改变一个final类型的变量值时会发生什么?我们来试一下,对上例添加如下修改:

    name = 'ma yun';

      看,编译器提示你出错了!所以,final变量被初始化之后是不能修改其值的。

    关于const类型,官方给的说明是“编译时常量”,我目前理解也不是太深刻,直接举个栗子吧:

      var foo = const [];
      final bar = const [];
      const baz = [];

    以上用法都是合法的,你还可以做如下操作,也是合法的,因为foo是var类型:

    foo = [1,2,3];

    但你不可以做下边的操作,,因为baz是const类型的:

    baz = [2,5,9];

     下边看一种const使用的特殊情况,大家自己体会体会吧:

    //以下3行代码合法
    const a = 2;
    const b = 3;
    const c = a * b;
    
    //以下代码编译出错,因为a是int而不是const类型的
    int a = 2;
    const b = 3;
    const c = a * b;
    
    //以下两行代码合法,因为2当作const常量类型
    const b = 3;
    const c = 2 * b;

    (二)Built-in类型

    Dart语言支持以下8种内建数据类型。

    (1)Numbers类型

    Dart的数字类型有两种:int和double。int变量通常不超过64bit,这取决于运行平台。double是64bit双精度浮点型。

    int和double都是num的子类型,num类型包括一些基本的操作,如+-*/,(位操作符,如>>,是在int类里定义的),如果num或num子类型不能满足你的需求,试试dart:math库。

    关于什么是整型数、什么是浮点数就不再举例子了啊,另外浮点数支持科学表示法。int类型可根据需要自动转换为double类型,如: double a = 1;

    下边举例看看字符串和数字之间的转换,这个我觉得通常挺有用的:

    int i = int.parse('126');    //把字符串‘126’转化为整数126
    double db = double.parse("12.36");    //把字符串'12.36‘转化为12.36
    String str = i.toString();    //把整型数字126(变量i)转化为字符串’126‘
    //下边一行语句把12.36转化为字符串,小数点后保留1位,自动四舍五入
    String pStr = db.toStringAsFixed(1);    

     int类型的变量可以进行位运算操作,如下,不再细述:

    int a = 3<<1;
    int b = 2|3;
    int c = 8>>1;

    (2)String类型

    Dart的字符串是utf-16的序列。dart和python类似,可以使用双引号,也可以使用单引号创建字符串。

    下面看一个例子(完整,可编译),这个栗子里边包含了两个很小、却很关键的知识点:

    main()
    {
      String s1 = 'Jack Ma';
      String s2 = '$s1 is ma yun';
    
      int i1 = 123456;
      String s3 = 'I have ${i1.toString()} yuan';
    
      print(s2);
      print(s3);
    
      if('Jack Ma is ma yun' == s2)
      {
        print('***');
      }
    }

    上述代码的运行结果是:

    知识点:

    1、你可以使用 ${expression} 将表达式的值嵌入到一个字符串中(如上例中s3变量),如果表达式只是一个标识符,则可以直接省略{}, 如上例中的s2变量

    2、可以使用 == 操作符比较两个字符串是否相同

    下面再看一个例子:

    main()
    {
      String s1 = 'Jack Ma';
      String s2 = ' is ';
      String s3 = 'Ma yun';
    
      String s4 = s1 +s2 +s3;
      String s5 = 'Jack Ma'' is ''Ma yun';
    
      print(s5);
    }

    上例运行的结果是  

    Amazing!!!我们看看s5是个什么变量,字符串,我们再看看它是怎么赋值的?我的天呐, 把 'Jack ma'、' is '和'Ma yun'三个字符串紧挨着放在一起,dart就能把他们合并成一个字符串变量。大家可以打印下s4观察输出。

    知识点

    1、可以使用 + 操作符,将多个字符串进行拼接;

    2、可以把相邻的字符串放在一起,编译器自动为你拼接;

    3、可以使用三个引号(双引号或单引号均可)创建跨行字符串(和Python类似);

    4、可以通过前缀r来创建原始字符串(和Python类似,原始字符串不对转义字符进行特殊处理,如 r'hh ' 不会将 处理为换行)。

      

    (3)Booleans类型

    Dart使用类型bool来表示boolean值,只有两个对象是bool类型:true和false,这两个都是编译时常量。

    bool类型比较简单,官网唯一的提示就是 不能使用 if(非布尔值) 或 assert(非布尔值) 这样的表达式。

    (4)Lists类型

    在Dart中,数组是列表对象。看下例子:

    var list_a = [2,3,6]; 
    //list_a[0] = 'string';  Error

    以上程序,dart推断list_a是 List<int> ,当你试图添加一个非整型数据进去时,编译器会报错。

    dart的数组像C语言一样,下标从0开始,到length-1为止,其中,可以通过list.length获取得数组的长度,如下:

    main()
    {
      var list_a = const [2,3,6]; // 定义一个编译时常量list
      print(list_a[0]);      // 打印:2
      print(list_a[2]);      // 打印:6
      print(list_a.length);    // 打印:3
    }

    (5)Sets类型

    Dart中的set是一系列无序项的集合。看一个简单的例子:

    var set_exam = {'set111', 'set222', 'set333'};

    上例中,dart能够推断出set_exam是String类型的set,当你试图追加非string类型的值时,会报错。

    当你想创建一个空的set时,需要在{}符号前添加set里变量的类型,或者使用set类型创建,如:

    //创建一个set,其中可存放string类型的值
    var names = <String>{};
    或者
    Set<String> names = {};    //与上面的等价
    //var names = {}; 这句话就不行了,这是创建了一个map,而不是set

    向一个set中添加数据可使用add()或addAll()方法,如下例:

      var set_1 = {'111', '222', '333'};
      var set_2 = <String>{};
      set_2.add('Add method');
      set_2.addAll(set_1);
    

    使用 length 属性去获取一个set里的元素个数,如:

      var set_1 = {'111', '222', '333'};
      var set_2 = <String>{};
      set_2.add('Add method');
      set_2.addAll(set_1);
      var set_num = set_2.length;
      print(set_num);    //打印出的值为 4

    创建一个const的set,可直接在{}前添加const修饰.

    (6)Maps类型

    Dart的map是一种key-value键对的类型,key和value均可以是任意值。一个key只能对应一个value,但是一个value却可以有多个key。看一个map的简单例子吧:

      var map_1 = {'first':'111', 'second':'222', 'third':'333'};
      var map_2 = {1:'111', 2:'111', 3:'333'};

    上例中,dart推断map_1是 Map<String,String> 类型,而map_2是 Map<int, String> 类型。同set一样,在类型确定后,你不能再添加非此类型的键值对了。

    也可以使用Map构造一个map变量:

    var gifts = Map();
    gifts['first'] = 'partridge';
    gifts['second'] = 'turtledoves';
    gifts['fifth'] = 'golden rings';

    向一个map变量中添加键值对:

    var gifts = {'first': 'partridge'};
    gifts['fourth'] = 'calling birds'; // Add a key-value 

     可以直接 String st=gifts['first']; 来获取某个键对应的值,当这个键在map中不存在时,将返回null.

    像set一样,map也可以使用 .length 来获取其中的键值对数,不再细述。

    (7)Runes类型

    Dart的rune类型主要是unicode编码之类的,我还没看太明白。。。

    (8)Symbols类型

    Dart的Symbol表示程序中出现的操作符或标识符,实际编程中没啥接触,不再细述。

  • 相关阅读:
    wifite+aimon-ng
    DC-2
    chrome插件开发
    mongoose的基本操作方法
    webpack中的require.context
    sequelize 数据类型 model
    React17 系统精讲 结合TS打造旅游电商平台
    2021必修 React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目
    21.8.2
    胡渊鸣《浅析信息学竞赛中概率论的基础与应用》学习笔记
  • 原文地址:https://www.cnblogs.com/gklovexixi/p/10614366.html
Copyright © 2011-2022 走看看