Dart ❄️

150 阅读2分钟

语言特性

Dart是面向对象设计
Dart是动态类型语言
Dart语言由:语言规范、虚拟机、类库、和工具等组成
SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。
    ``` 
        Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。
        Dart2js:将 Dart 代码编译为 JavaScript 的工具。
        Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。
    ```
Dart中 类和接口是统一的
为提高运行速度,可以指定数据类型和编译时的常量
Dart提供类顶级函数,以变量 "_"开头意味着对它对lib是私有的
未初始化的变量 默认值为null
const命名 编译时的常量
实例变量可以是final,但不可以是const,final的值只能被设定一次

基础

数据类型

```
    
    // 1、num
    // num 是数字类型的父类,有两个子类 int 和 double
        // int 根据平台的不同,整数值不大于64位。在Dart VM上,值可以从-263到263 - 1,编译成JavaScript的Dart使用JavaScript代码,允许值从-253到253 - 1。
        // double 64位(双精度)浮点数,如IEEE 754标准所规定
        
    // 2、String
        // Dart里面的String是一系列 UTF-16 代码单元。
        // 您可以使用单引号或双引号来创建一个字符串。
        // 单引号或者双引号里面嵌套使用引号。
        // 用 或{} 来计算字符串中变量的值,需要注意的是如果是表达式需要${表达式}
        
    // 3、bool
        // Dart 是强 bool 类型检查,只有bool 类型的值是true 才被认为是true。
        // 只有两个对象具有bool类型:true和false,它们都是编译时常量。
        // Dart的类型安全意味着您不能使用 if(nonbooleanValue) 或 assert(nonbooleanValue) 等代码, 相反Dart使用的是显式的检查值。
        // assert是语言内置的断言函数,仅在检查模式下有效在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)。
        
    // List集合
        // 在Dart中,数组是List对象,因此大多数人只是将它们称为List。
        // Dart list文字看起来像JavaScript数组文字
        // 可以直接打印list包括list的元素,list也是一个对象。但是java必须遍历才能打印list,直接打印是地址值。
        // 和java一样list里面的元素必须保持类型一致,不一致就会报错。
        // 和java一样list的角标从0开始。
        // 如果集合里面有多个相同的元素“X”, 只会删除集合中第一个该元素
        
    // Map集合
        // 一般来说,map是将键和值相关联的对象。键和值都可以是任何类型的对象。
        // 每个键只出现一次,但您可以多次使用相同的值。Dart支持map由map文字和map类型提供。
        // 初始化Map方式一: 直接声明,用{}表示,里面写key和value,每组键值对中间用逗号隔开。
        // 创建Map方式二:先声明,再去赋值。
        // map的key类型不一致也不会报错。
        // 添加元素的时候,会按照你添加元素的顺序逐个加入到map里面,哪怕你的key,比如分别是 1,2,4,看起来有间隔,事实上添加到map的时候是{1:value,2:value,4:value} 这种形式。

```

变量与常量

```
    // 1、声明关键字
        var
        const
        final
        class
        void
        Object
        String
        int
        
    // final、const
    // final修饰的顶级变量或类变量在第一次声明的时候就需要初始化
    // 被final或者const修饰的变量,变量类型可以省略,建议指定数据类型
    // final 或 const 修饰的变量无法再去修改其值
    // flnal 或者 const 不能和 var 同时使用
    // 常量如果是类级别的,请使用 static const
    // const关键字不只是声明常数变量,您也可以使用它来创建常量值,以及声明创建常量值的构造函数,任何变量都可以有一个常量值
    // 在常量表达式中,该运算符的操作数必须为'bool'、'num'、'String'或'null', const常量必须用conat类型的值初始化
    // 常量的运算
    const speed = 100; //速度(km/h)
    const double distance = 2.5 * speed; // 距离 = 时间 * 速度
    
    final speed2 = 100; //速度(km/h)
    final double distance2 = 2.5 * speed2; // 距离 = 时间 * 速度
    
    //可以省略String这个类型声明
        final name = "Bob";
        final String name1  = "张三";
     
        const name2 = "alex";
        const String name3 = "李四";

    // 2、默认值: 未初始化的变量 默认缺省值为null
    int count 
    
    // 3、变量声明与初始化:没有明确类型,编译的时候根据值明确类型
    var name = ‘Bob’; 
    Object name = 'James';
    dynamic name = 'Curry';
    // 显示声明将被推断类型,    可以使用String显示声明字符串类型
    String name = 'Bob' ;
    
```

#### 运算符

```
    



```

#### 流程控制语句

```

    // if...else
    // for
    // while do-whild
    // break continue
    // switch...case
    // assert(仅在checked模式有效)

```

#### 异常(Exceptions)

```

    // throw
    // 抛出固定类型的异常
        throw new FormatException('Expected at least 1 section');
    // 抛出任意类型的异常
        throw 'Out of llamas!';
    // 因为抛出异常属于表达式,可以将throw语句放在=>语句中,或者其它可以出现表达式的地方
         distanceTo(Point other) => throw new UnimplementedError();
    
    // catch
        // 将可能出现异常的代码放置到try语句中,可以通过 on语句来指定需要捕获的异常类型,使用catch来处理异常。
         try {
            breedMoreLlamas();
         } on OutOfLlamasException {
            // A specific exception
            buyMoreLlamas();
         } on Exception catch (e) {
            // Anything else that is an exception
            print('Unknown exception: $e');
         } catch (e, s) {
            print('Exception details:\n $e');
            print('Stack trace:\n $s');
         }
        
    // rethrow
        // rethrow语句用来处理一个异常,同时希望这个异常能够被其它调用的部分使用。
                    
         final foo = '';
        
         void misbehave() {
            try {
              foo = "1";
            } catch (e) {
              print('2');
              rethrow;// 如果不重新抛出异常,main函数中的catch语句执行不到
            }
         }
        
         void main() {
            try {
              misbehave();
            } catch (e) {
              print('3');
            }
         }
        
        
    // finally
        // Dart的finally用来执行那些无论异常是否发生都执行的操作。
          final foo = '';

          void misbehave() {
            try {
              foo = "1";
            } catch (e) {
              print('2');
            }
          }
        
          void main() {
            try {
              misbehave();
            } catch (e) {
              print('3');
            } finally {
              print('4'); // 即使没有rethrow最终都会执行到
            }
          }

```

 #### 函数

```
    // main()函数
        //每个应用程序都必须有一个顶层main()函数,它可以作为应用程序的入口点。该main()函数 具有List<String>参数的可选参数 返回void。

```

#### 级联符号 ..