• Dart的变量与内置类型


    一.Dart 简介

    Dart是谷歌发布的一门面向对象的开源编程语言,诞生于2011年10月10日,Dart是一种“结构化的Web编程”语言,在所有现代的浏览器和环境中提供高性能。

    Dart主要用途分为三种:

    •   Flutter开发移动应用
    •   Dart webdev 开发浏览器应用
    •   Dart VM开发脚本或者服务器应用

    下面即将开启Dart学习之旅

    二.Dart语法

    重要概念(Important concepts)

    在学习Dart的时候,请牢记下面的一下事实和概念:

    •   所有能够使用变量引用的都是对象,每个对象都是一个类的实例。在Dart中甚至连数字、方法和null都是对象。所有的对象都继承与Object类。
    •   虽然Dart是强类型,但由于Dart可以推断类型,所以类型注释是可选的,当您不需要明确的类型时,可以使用dynamic类型。
    •  Dart支持泛型类型,像List<int>(整数类型)或者List<dynamic>(任何类型的对象)
    •   支持顶层函数(例如main()),以及绑定到类或者对象的函数(分别是静态方法和实例方法)。您还可以在函数中创建函数(嵌套函数或本地函数)。
    •   类似地,Dart支持顶级变量,以及绑定到类或对象的变量(静态变量和实例变量)。实例变量有时称为字段或属性
    •   与Java不同,Dart没有关键字public、proteched、private。如果标识符以下划线(_)开头,则它是其库的私有标识符。
    •   标识符可以以字母或下划线开头,然后这些字符和数字的任意组合
    •   Dart同时具有表达式和语句。例如,条件表达式条件 ? expr1 : expr2 ; 最后得到的值为expr1 或expr2,将其与没有值得if-else 语句进行比较,语句通常包含一个或多个表达式,但表达式不能直接包含语句。
    •   Dart工具可以报告两种类型的问题:警告和错误,警告只表明您的代码可能无法工作,但它们不会阻止您的程序执行。错误可以是编译时的,也可以是运行时的。编译时的错误完全阻止了您的程序执行,运行时错误会导致在执行代码时引发异常。

    1.  变量

    变量是一个引用,根据Dart中“万物皆对象”原则,即变量存储的都是对象的引用,或者说它们都是指向对象

    1)  声明变量

    声明可以有两种方式,一种是不指定类型,即使用var关键字

     var name = "Bob";
    

    另一种是明确指定类型(Optional types)

    String name = "Bob";
    

    因为有类型推导,所以两种实现效果一样,官方推荐在函数内的本地变量尽量使用var声明。

    在变量类型并不明确的情况下,可以使用dynamic关键字

    dynamic name = "Bob";
    

    2 )  默认值

    没有初始化的变量自动获取一个默认值为null。类型为数字的变量如果没有初始化其值也是null,不要忘记数字类型也是对象。

    var name;
    var age;
    print(name); // null
    print(age); // null
    

    2.  Final与const

    如果一个变量的值不再修改,则使用final或者const代替var。

    一个final变量只能赋值一次;一个const变量是编译时常量,const变量默认为final变量。顶层final变量与类变量在首次访问时才执行初始化。需要注意的是,实例变量可以为final,但是不能是const

    // 常量
    const bar = 1000;
    // 常量计算也是常量
    const atm = 0.15 * bar;
    

    const 关键字不仅仅只能用来定义常量,也可以用来创建不变的值,还能定义构造函数为const类型的,这中类型的构造函数创建的对象是不可改变的。任何变量都可以有一个不变的值。

    var foo = const[1,2,3];
    final baz = const[2,3,4];
    

    3.  内置类型

    Dart内置支持下面这些类型

    •   numbers
    •   string
    •   boleans
    •   lists(或称arrays)
    •   sets
    •   maps
    •   runes(用于在字符串中表示Unicade字符)
    •   symbols

    1)   Numbers(数值)

    Dart支持两种类型的数字

    int 整数值、double (双精度) 浮点数,两者都是num的子类。Num类型定义了基本的操作符,例如+-*/,还定义了abs()、ceil()、和floor()等函数。

    2) 字符串(String)

    Dart字符串使用单引号或者双引号来创建字符串;

    String s1 = 'Single quotes work well for string literals.';
    String s2 = "Double quotes work just as well.";
    

    可以使用+操作符来把多个字符串连接为一个,也可以把多个字符串放到一起实现同样的功能

    String s3 = 'String ''concatenation'
        ' works even over line breaks.';
    String s4 = 'The + operator ' + 'work,as well.';
    print(s3);
    print(s4);
    

    输出结果:

    其中官方不建议使用+操作符连接字符串。

    使用三个单引号或者双引号也可以创建多行字符串对象

    String s5 = '''
    You can create
    multi-line strings like this one.
    ''';
    String s6 = """
    This is alse a 
    multi-line string.
    """;
    print(s5);
    print(s6);

    输出结果:

    通过提供一个r前缀可以创建一个“原始raw”字符串

    var s = r"In a raw string, even 
     isn't special.";
    var ss = "In a raw string, even 
     isn't special.";
    print(s);
    print(ss);
    

    输出结果:

    可以在字符串中使用表达式,用法为:${expression}。如果表达式是一个标识符,可以省略{},如果表达式的结果为一个对象,则Dart会调用对象的toString()函数来获取一个字符串

    var str = 'string interpolation';
    if("Dart has $str ,which is very handy." ==
        "Dart has string interpolation ,which is very handy."){
      print("yes");
    }
    if('Dart has ${str.toUpperCase()} ,which is very handy.' ==
     'Dart has STRING INTERPOLATION ,which is very handy.'){
       print("upperCase is yes");
    }
    

    3)  Booleans(布尔值)

    为了代表布尔值,Dart有个名为bool的类型。只有两个对象是布尔类型的:true和false所创建的对象,这两个对象也都是编译时常量。

    当Dart需要一个布尔值的时候,只有true对象才被认为是true,所有其他的值都是false,这点和javascript不一样,像1,“aString”以及someObject等值都认为是false。

    如果在javascript中运行,则会打印Bob,在javascript中name是非null对象,所以为true,但在Dart的生产模式下运行,则不打印任何内容,原因是name != true;  name被转换为false了。如果在Dart检查模式运行,代码会抛出异常,表示变量name不是一个布尔值。

    4)  Lists(列表)

    也称array(有序集合)是所有编程语言中最常见的集合类型。在Dart中数组就是List对象。所以通常称之为lists。

    var list = [1,2,3];
    print("list长度为:"+list.length.toString()); //list长度为:3
    print("第二个数值为:"+list[1].toString()); //第二个数值为:2
    list[1] = 1;
    print("修改后,第二个数值为:"+list[1].toString()); //修改后,第二个数值为:1
    

    list可以使用const关键字,可以定义一个不变的list对象(编译时常量)

    var constantList = const[1,2,3];

    定义一个空的可变的list,尽量使用[],如(var points = []),如果您想创建一个不可变的list,护着其他自定义类型的集合,可以使用构造函数。

    如果有必要还可以提供泛型类型

     var points = <Point>[];
    

    5 )  Maps

    通常来说,Map是一个键值对相关的对象。键和值可以是任何类型的对象。每个键出现一次,而一个值则可以出现多次。

    下面是一些简单实例 

    var gifts = {
      'frist':'partridge',
      'second':'turtldoves',
      'fifth':'golden rings'
    };
    var nobleGases = {
      2 :   'helium',
      10:   'neon',
      18:   'argon',
    };
    

    使用map构造函数也可以实现同样的功能:

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

    往map中添加新的键值对和在javascript中用法一样

     gifts['fourth'] = "calling birds"; // 添加新的键值对

    获取map中的对象

     print(gifts['fourth']); //calling birds
    

    使用length来获取map中键值对的数目:

    print("gifts中总数为:"+gifts.length.toString()); //gifts中总数为:4
    

    同样使用const可以创建一个编译时常量的map 

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

      

  • 相关阅读:
    修改mysql root账户登录密码
    taglib的uri问题
    encoding/path可能引起无数奇怪的问题
    查看JSTL的doc解决问题
    matlab 读取nc
    matlab fread
    用matlab将nc数据读出来,写成二进制文件,然后用grads画图
    matlab 三维绘制
    flex label 换行
    Struts2的使用以及Spring整合Struts2
  • 原文地址:https://www.cnblogs.com/Ayinger/p/11133706.html
Copyright © 2020-2023  润新知