日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

dart語言一些注意點

 昵稱71011036 2020-08-10

1.

const是編譯時就要確定值,所以不能這樣寫:

const datetime tim=datetime(); //因為datetime()的值只有運(yùn)行時才能確定。

 

Final是第一次運(yùn)行時需要確定值,所以可以這樣寫:

Final datetime tim=datetime();//因為datetime()的值運(yùn)行時才會確定,final關(guān)鍵字支持這樣的用法

 

Const和final的相同點是二者的值都無法再次更改,區(qū)別在于初始化時間。const是編譯時就要確定值,而final可以在第一次運(yùn)行時確定值。另外,使用這兩個關(guān)鍵字修飾變量都可以省略變量類型,如:

Final a=DateTime.now();

Const b=5;

 

2.

類大括號外面沒有分號,如:

Class p{

Pass….

}

 

3.

只有一個語句的函數(shù)可以用胖箭頭簡寫法,如

int f(var x){

return x*x;

}

再如:

void f(var t)=>print(t);

 

 

4.

typedef Fly = void Function(int value);//Fly是定義了一個方法,該方法只有一個int形參,F(xiàn)ly不是特定的函數(shù),而是一個類型,可以用來定義變量。Fly類型的變量都是特定的具體函數(shù)。

void main(){

  Bird bird = Bird((int a){print(a);});//如果實參函數(shù)的類型不是該類型的話 編譯不通過

  bird.fly(3);//bird是Bird類型的變量,Bird類中有一個Fly類型的變量,而Fly類型就是一個方法類型,所以fly成員變量就是一個特定的方法(函數(shù)),所以可以這樣調(diào)用:bird.fly(3)

 Bird類定義在下面:

class Bird{

  Fly fly;

  Bird(this.fly);

}

 

5.

函數(shù)位置參數(shù)使用方括號[]括起來: int f(int x, int y,[int z]){} //z是可選的形參

函數(shù)命名參數(shù)用大括號{}括起來:int f({String name,String Sex}){},可以這樣調(diào)用:

f(name:’wangziyou’,Sex:’Male’);

但二者不能同時使用

 

6.

斷言assert,assert內(nèi)部包含一個返回bool的表達(dá)式,如果返回false,那么assert就會拋出error暫停調(diào)試。正常使用方式是:對于不確定是否會報錯的語句加上assert,如果正常運(yùn)行不會拋出異常就代表這個語句沒有問題。

 

7.

Dart中的String可以用單引號或者雙引號擴(kuò)起來,兩種都行。

 

8.

  var p=['1','2','3','4']; //p是list<int>類型的

  var x=p.join('*'); //把p里的各個字符用*拼起來—-》;’1*2*3*4

  print(x.split('*')); //把x用*作為分割符,分割為不同的字符串,保存在list里

  如果字符串每個字符都分開,比如’abcd’—>’a’ ‘b’ ‘c’ ‘d’

寫法是:p.split(‘’)即可,注意括號里是不帶空格的,兩個單引號是連著的。

之后再拼起來也是.join(‘’),括號里面也是不帶空格的。

 

9.

dart的future對象用于異步調(diào)用,它的成員函數(shù)貌似返回的也都是future對象(這一點待確定)

 

10.

Dart中a/b結(jié)果為double類型的,如果想得到整數(shù)結(jié)果需要:a~/b

 

11.

is 、as 屬于Type test operators。

is 判斷是否是某個類型,返回true或者false。
如果a 是b的實現(xiàn)類,那么a is b 就返回true。

as 是類型轉(zhuǎn)換,其相當(dāng)于 :先檢測 其是不是,然后再調(diào)用的一種簡寫。
但是還不是完全一致,當(dāng)不是的時候,as 會拋出exception。

if (emp is Person) {

  // Type check

  emp.firstName = 'Bob';

}

可以簡寫為:

(emp as persion).firstName='Bob';

如果emp 不是persion,name就會拋出exception。

 

12.

??=也是賦值符,但只有在被賦值的變量為空時。如果不為空,則不做任何事情。

// 賦值給a

a = value;

// 如果b為空,則將值分配給b;否則,b保持不變

b ??= value;

 

??是條件運(yùn)算符:

expr1 ?? expr2

如果expr1為非空,則返回其值;否則,計算并返回expr2的值。

 

13.

..是極聯(lián)符(不算運(yùn)算符,只是dart語法的一部分),它表示對前一句的對象進(jìn)行一系列調(diào)用,只要是對象就行,不需要是某個函數(shù)的返回結(jié)果。栗子:

void main(){

  List p=[];

  p

  ..length

  ..clear()

  ..sort();

}

這段代碼相當(dāng)于p.length; p,clear(); p.sort();

注意極聯(lián)的縮進(jìn)

 

14.

Dart支持函數(shù)的嵌套定義

 

15.

Dart中所有函數(shù)都有返回值。

沒有顯示返回語句的函數(shù)最后一行默認(rèn)為執(zhí)行 return null;。

foo() {}

assert(foo() == null); 

 

16.

 

Dart中捕獲異常通過try on/catch來實現(xiàn),on可以指定具體的異常類型,catch則可以捕獲異常對象:catch(e),然后可以輸出e的信息。

try {

  breedMoreLlamas();

} on OutOfLlamasException {

  // 指定異常

  buyMoreLlamas();

} on Exception catch (e) {

  // 其它類型的異常

  print('Unknown exception: $e');

catch (e) {

  // // 不指定類型,處理其它全部

  print('Something really unknown: $e');

 

17.

 

兩個使用相同構(gòu)造函數(shù)相同參數(shù)值構(gòu)造的編譯時常量是同一個對象:

 

var a = const ImmutablePoint(1, 1);

var b = const ImmutablePoint(1, 1);

 

assert(identical(a, b)); // 它們是同一個實例 (They are the same instance!)

 

18.

子類中可以通過super.xxxx()來調(diào)用父類的方法

 

19.

繼承這樣寫的:

class Person {

    int age;

    string name;

    Person(int age, String name){

        this.age = age;

        this.name = name;

    }

    void sayhi(){

        print('my name is' this.name)

    }

}

 

class Worker extend Person{

    int salary;

    Worker(int age, string name, int salary) : super(age, name){  //super表示要繼承父類的屬性

        this.salary = salary;

    }

    @override  //告訴編譯器和程序員他是一個重寫覆蓋父類的方法

    void sayhi(){     super.sayhi()    //表示調(diào)用父類的sayhi方法

        print('my salary is'+ this.salary)

    }

}

 

20.

dart中系統(tǒng)默認(rèn)類型的數(shù)據(jù)(比如int/num這種基本的數(shù)據(jù)類型),兩個相同值的不同變量是=的

但如果是自己定義的類,但是沒有重載=運(yùn)算符,甚至是官方的map/set/list進(jìn)行=比較,都會返回false:

因為dart中的所有類型都是object的子類,所以如果沒有單獨定義=運(yùn)算符,那么對兩個變量進(jìn)行=運(yùn)算,都使用的是object的=運(yùn)算符,而object的=運(yùn)算符是用于檢測參數(shù)與接收者是否相同,所以就會出現(xiàn)下面這種奇怪的情況,c++里是不會有這種情況的:

需要operator= (another) {return xxxxx;}來對=運(yùn)算符進(jìn)行重載,這樣就可以通過=判斷是否相等了。

然后如果還有需要判斷是否相同的需求,可以使用identical(a,b)的方法,該方法定義在dart:core庫中。

21.

set方法寫法:set(another)=> xx=another.xx;

get方法寫法:get=>xxxx;    //注意get方法是不帶參數(shù)列表的(不帶參數(shù)括號!)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多