Flutter入门(二)------Dart语言

 

一.运算符

Dart支持各种类型的运算符,并且其中一些操作符还能进行重载。

该表中的操作符优先级由上到下逐个减少,上面行内的操作符优先级大于下面行内的操作符。

1.算术运算符

Dart常用的算术运算符。

Dart前缀和后缀递增和递减运算符。

++var执行前+1    var++执行后+1

--var执行前-1       var--执行后-1

示例代码:

var a , b; 
a = O; 
b =++a ; //在b 获得其值之前自增a
assert(a == b); // 1 == 1 

a = O; 
b=a++; //在b 获得值后自增a
assert(a != b); // 1 != 0

 
a = O; 
b = --a; //在b 获得其值之前自减a
assert{a == b); // -1 == -1

 
a = 0; 
b = a--;// 在b获得值后自减a
assert{a != b);   // -1 != O

2.关系运算符

3.类型测试操作符

4.赋值操作符

可以使用=运算符赋值。要仅在变量为 null 时赋值,请使用??=运算符

5.逻辑运算符

6.位运算符

通常我们指位运算为<<或>>移动位运算,通过操作位的移动来达到运算的目的,而 &、|、^、~expr 也是操作位来达到运算的目的。

7.条件表达式

Dart 有两个运算符,可用来简明地评估可能需要 if-else 语句的表达式。 如下代码即为一种条件表达式,也可以称为三元表达式。 如果条件为真,返回 exprl ,否则返回 expr2:

condition ? exprl : expr2

第二种如下所示, 如果exprl 为非空, 则返回其值;否则, 计算并返回 expr2 的值:

exprl ?? expr2

8.级联操作

级联操作用两个点(..)表示,可对同一对象执行一系列操作。类似于 Java 语言里点点点处理或 JavaScript 里的 Promise的 then 处理 。级联操作主要的目的是为了简化代码,示例如下:

二.流程控制语句

 1.Dart语言的流程控制语句如下:

   if和else    for(循环) 

   while和do-while(循环) 

   break和continue   

                 break为跳出循环   continue为只跳出本次循环,代码还会继续向下执行。

   switch和case   

   assert(断言)    

                Dart 语言通过使用 assert 语句来中断正常的执行流程,当 assert 判断的条件为 false 时发生中 断。assert 判断的条件是任何可以转化 boolean 类型的对象,即使是函数也可以。如果assrt 的判断为true,则继续执行下面的语句;反之则会抛出 一个断言错误异常 AssertionError。

   try-catch和throw

2.异常处理

    异常是表示发生了意外的错误,如果没有捕获异常,引发异常的隔离程序将被挂起,并且程序将被终止。

    Dart 代码可以抛出并捕获异常,但与 Java相反, Dart 的所有异常都是未检查的异常。方法不声明它们可能抛出哪些异常,也不需要捕获任何异常。 

    Dart 提供了异常和错误类型以及许多预定义的子类型。当然,也可以定义自己的异常。然而, Dart程序可以抛出任何非空对象。

     1.抛出异常

    2.捕获异常

      你可以指定一个或两个参数来捕获异常( catch ),第一个是抛出的异常,第二个是堆栈跟踪( StackTrace 对象)。

     

  3.Finally

  要确保某些代码能够运行,无论是否抛出异常,请使用 finally 子句。 如果没有 catch 子句匹配异常, 则异常在 finally 子句运行后传播。

 

三.面向对象

   Dart 为高级语言支持面向对象的很多特性,并且支持基于 mixin 的继承方式 基于 mixin 的继承方式是指:一个类可以继承自多 父类,相当于其他语言里的多继承 。所有的类都有 一个基类 Object ,这个特性类似于Java 语言, Java 所有的类也都是继承自 Object, 也就是说一切皆为对象

       使用 new 语句实例化一个类,如下所示

      // 实例化了 User 类的对象 user

       var user = new User ( 张三 ’, 20);

    1.实例化成员变量

   

     2.构造函数

       1.常规构造函数

      构造函数是用来构造当前类的函数,是一种特殊的函数,函数名称必须要和类名相同 才行。

     

    2.命名的构造函数

        使用命名构造函数从另一类或现有的数据中快速实现构造函数

         

  3.构造函数初始化列表

    除了调用父类的构造函数,也可以通过初始化列表在子类的构造函数运行前来初始化 实例的成员变量值。

   

3.读取和写入对象

   get ()和 set()方法是专门用于读取 和写入对象的属性的方法,每一个类的实例,系统都 隐式地包含有 get()和 set () 方法。

4.重载操作

    

class V {
  final int x;
  final int y;


  const V(this.x,this.y);

  //重载+号
  V operator +(V v){
    return new V(x+v.x,y+v.y);
  }

  //重载-号
  V operator -(V v){
    return new V(x-v.x,y-v.y);
  }

}

void main(){
    final a=new V(3,4);
    final b=new V(3,5);

    final aaa=a+b;
    print(aaa.x.toString()+ '=====' +aaa.y.toString());


    final bbb=a-b;
    print(bbb.x.toString()+ '=====' +bbb.y.toString());
}

5.继承类

继承就是子类继承父类的特征和行为,使得子类对象 (实例)具有父类的实例域和方法;或子类从父类继承方法,使得子类具有父类 相同的行为。 Dart 里使用extends 关键字来创建一个子类,super关键字来指定父类。

6.抽象类

抽象类类似Java语言中的接口。抽象类里不具体实现方法,只是写好定义接口,具 体实现留着调用的人去实现。抽象类可以使用abstract 关键字定义类。

7.枚举类型

枚举类型是一种特殊的类,通常用来表示相同类型的一组常量值。每个枚举类型都用 于一个 index的getter ,用来标记元素的元素位置。第一个枚举元素的索引是 0。 

8.Mixins

Mixins (混入功能)相当于多继承,也就是说可以继承多个类 。使用with 关键字来实 现Mixins 的功能。

四.泛型

泛型通常是为了类型安全而设计的,适当地指定泛型类型会生成更好的代码,可以 用泛型来减少代码重复。Dart 中使用<T>的方式来定义泛型.

五.库的使用

  1.引用库

 通过 import 语句在一个库中引用另一个库的文件。 要注意以下事项

  a.在 import语句后面需要接上库文件的路径。

  b. 对 Dart 语言提供的库文件使用 dart: xx 格式。

  c.对第三方的库文件使用 package:xx 格式。

 2.制定一个库的前缀

 当引用的库拥有相互冲突的名字,可以为其中一个或几个指定不一样的前缀。 这与命名空间的概念比较接近。

3.引用库的一部分

show 关键宇:只引用 一点。

hide 关键字:除此之外都引用。

六.异步支持

   七.元数据

     使用元数据给代码添加更多的信息。元数据是以 @开始的修饰符,在@后面接着编译时的常量或调用一个常量构造函数。 目前 Dart 语言提供 三个@修饰符:

    @deprecated 被弃用的。   @override 重写 。   @proxy代理。

    元数据可以修饰 library (库) class (类) typedef(类型定义)、 type parameter (类 型参数) constructor (构造函数)、 factory (工厂函数) function (函数) field (作用域)、 parameter (参数) variable claration (变量声明)

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章