dart基礎(chǔ)

一站蝠、dart基本介紹

Dart是由谷歌開(kāi)發(fā)的計(jì)算機(jī)編程語(yǔ)言,它可以被用于web揽祥、服務(wù)器、移動(dòng)應(yīng)用 和物聯(lián)網(wǎng)等領(lǐng)域的開(kāi)發(fā)桨醋。
Dart誕生于2011年棚瘟,號(hào)稱要取代JavaScript。但是過(guò)去的幾年中一直不溫不火喜最。直到Flutter的出現(xiàn)現(xiàn)在被人們重新重視偎蘸。要學(xué)Flutter的話我們必須首先得會(huì)Dart。

二瞬内、程序執(zhí)行過(guò)程

//helloword.dart
main(List<String> args) {
  print('Hello World');
}

一迷雪、Dart語(yǔ)言的入口也是main函數(shù),并且必須顯示的進(jìn)行定義虫蝶;
二章咧、Dart的入口函數(shù)main是沒(méi)有返回值的;
三秉扑、傳遞給main的命令行參數(shù)慧邮,是通過(guò)List<String>完成的。從字面值就可以理解List是Dart中的集合類型舟陆。其中的每一個(gè)String都表示傳遞給main的一個(gè)參數(shù)误澳;
四、定義字符串的時(shí)候秦躯,可以使用單引號(hào)或雙引號(hào)忆谓;
五、語(yǔ)句必須使用分號(hào)結(jié)尾(JavaScript不用)踱承;

三倡缠、變量

變量必須按照如下方式聲明:變量類型 變量名稱 = 賦值;
注意:var name= "123";不是一種明確聲明,他是在編譯中使用類型推導(dǎo)
注意:dynamic name= "123";相當(dāng)于TypeScript
特點(diǎn):
?1. 變量強(qiáng)類型茎活,只可修改昙沦,類型不可修改。
?2. const在賦值時(shí), 賦值的內(nèi)容必須是在編譯期間就確定下來(lái)的final在賦值時(shí), 可以動(dòng)態(tài)獲取, 比如賦值一個(gè)函數(shù)载荔,其次, final一旦被賦值后就有確定的結(jié)果, 不會(huì)再次賦值


String getName() {
    return 'coderwhy';
  }
const name1 = getName(); // 錯(cuò)誤的做法, 因?yàn)橐獔?zhí)行函數(shù)才能獲取到值
final name2 = getName(); // 正確的做法

四盾饮、數(shù)據(jù)類型

  1. 數(shù)值型 int,double。(整數(shù)用int懒熙,浮點(diǎn)數(shù)用double)
  2. 布爾型 (注意if判斷時(shí)不像js遵行非0或非空為真)
  3. dynamic丘损,使用dynamic來(lái)聲明的變量,可以改變變量類型工扎。
    dynamic name = "123";
    name = 0 ;
  4. 字符串類型徘钥。
    var s = '中';
  5. 集合類型:Dart則內(nèi)置了最常用的三種:List / Set / Map。
    List 數(shù)組(與javascript的數(shù)組類似肢娘,但自動(dòng)識(shí)別數(shù)組中元素類型呈础,保證類型的一致性舆驶。)

List定義:

  // 1.使用類型推導(dǎo)定義
  var letters = ['b', 'c', 'd', 'a'];
  // 2.明確指定類型
  List<int> numbers = [1, 2, 3, 4];

List常用函數(shù):

  list1.add('white'); //add添加新元素
  list1.length; //獲取集合的長(zhǎng)度
  list1.insert(1, 'black'); //在集合指定index位置插入指定的元素
  list1.removeAt(2); //移除集合指定的index=2的元素
  list1.sublist(1, 3); //截取子集合
  list1.getRange(1, 3); //獲取集合中某個(gè)范圍元素,截取之后不是list
  list1.join('<--->'); //輸出: red<--->yellow<--->blue<--->green
  list1.isEmpty; //判斷數(shù)組非空 true,false
  list1.contains('green'); //判斷數(shù)組是否含有某個(gè)元素
  list1.clear(); //清除所有元素

Set: 集合Set和列表List的區(qū)別在于 集合中的元素是不能重復(fù) 的猪落。所以添加重復(fù)的元素時(shí)會(huì)返回false,表示添加不成功.
Set定義:

Set常用函數(shù)(強(qiáng)調(diào) 交集贞远,并集畴博,補(bǔ)集):

  var colorSet1 = {'red', 'yellow', 'blue', 'green'};
  var colorSet2 = {'black', 'yellow', 'blue', 'green', 'white'};
  print(    colorSet1.intersection(colorSet2)     ); //交集-->輸出: {'yellow', 'blue', 'green'}
  print(    colorSet1.union(colorSet2)               ); //并集--->輸出: {'black', 'red', 'yellow', 'blue', 'green', 'white'}
  print(    colorSet1.difference(colorSet2)        ); //補(bǔ)集--->輸出: {'red'}
  print(    colorSet2.difference(colorSet1)        ); //補(bǔ)集--->輸出: {black, white}

Set數(shù)組遍歷和List遍歷一樣笨忌。

Map

  // 1.使用類型推導(dǎo)定義
  var infoMap1 = {'name': 'why', 'age': 18};
  // 2.明確指定類型
  Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
  Map<String, int> colorMap = {'white': 0xffffffff, 'black':0xff000000};   
       
   print(colorMap.containsKey('green'));            //false  判斷是否含有某個(gè)key       
   print(colorMap.containsValue(0xff000000));       //true   判斷是否含有某個(gè)value       
   print(colorMap.keys.toList());                   //取Key成數(shù)組   ['white','black']       
   print(colorMap.values.toList());                 //取value成數(shù)組 [0xffffffff, 0xff000000]       
   colorMap['white'] = 0xfffff000;                  //修改指定key的元素       
   colorMap.remove('black');                        //移除指定key的元素  

五、流程控制

//循環(huán)
  List<int> listFor = [1, 2, 3, 4, 5];
  for (var i = 0; i < listFor.length; i++) {
    print(listFor[i]);
  }

  var j = 0;
  while (j < listFor.length) {
    print(listFor[j++]);
  }

  var index = 0;
  do {
    print(listFor[index]);
    index++;
  } while (index < listFor.length);

  // if-else 和js一樣俱病,但判斷時(shí)必須以返回值true,false官疲,null,0,undefined等不能識(shí)別

  //三目運(yùn)算符(? : )和js一樣

  //switch-case 和js一樣

Assert(斷言) ---------目前還不了解

在dart中如果條件表達(dá)式結(jié)果不滿足條件亮隙,則可以使用 assert 語(yǔ)句中斷代碼的執(zhí)行途凫。特別是在Flutter源碼中隨處可見(jiàn)都是assert斷言的使用。注意: 斷言只在檢查模式下運(yùn)行有效溢吻,如果在生產(chǎn)模式運(yùn)行维费,則斷言不會(huì)執(zhí)行。
assert(text != null);//text為null,就會(huì)中斷后續(xù)代碼執(zhí)行
assert(urlString.startsWith('https'));

五促王、異常捕獲

dart中的異常捕獲方法和Java,Kotlin類似犀盟,使用的也是try-catch-finally; 對(duì)特定異常的捕獲使用on關(guān)鍵字. dart中的常見(jiàn)異常有: NoSuchMethodError(當(dāng)在一個(gè)對(duì)象上調(diào)用一個(gè)該對(duì)象沒(méi)有 實(shí)現(xiàn)的函數(shù)會(huì)拋出該錯(cuò)誤)、ArgumentError (調(diào)用函數(shù)的參數(shù)不合法會(huì)拋出這個(gè)錯(cuò)誤)

  int num = 18;
  int result = 0;
  try {
    result = num ~/ 0;
  } catch (e) {//捕獲到IntegerDivisionByZeroException
    print(e.toString());
  } finally {
    print('$result');
  }

六蝇狼、函數(shù)

1.函數(shù)都必須有返回值阅畴,如果沒(méi)有的話,那將自動(dòng)返回null;

2.匿名函數(shù);
colorSet1.forEach((item) {
print(item);
});

(item) {
print(item);
}這個(gè)就是匿名函數(shù)

3.dart 的函數(shù)和js一樣迅耘,可以給變量賦值贱枣,成函數(shù)表達(dá)式 var myFunc = closureFunc();

4.dart 也有閉包(子函數(shù)訪問(wèn)父函數(shù)的變量)

5.A函數(shù)作為B函數(shù)的參數(shù)
注意:因?yàn)楹瘮?shù)必須指定返回值類型和參數(shù)的類型,所以在定義B()時(shí)必須指明A的參數(shù)形式颤专。

6.不像java中有函數(shù)重載纽哥,但可以設(shè)置函數(shù)參數(shù)的可選還是必填
必填參數(shù):和java一樣
可選參數(shù)分為兩種:位置可選、命名可選
位置可選:[],通過(guò)位置確定從左到右排列栖秕,只能選擇不要最后(只能選擇保留一一對(duì)應(yīng)得參數(shù)關(guān)系)春塌,不能跳過(guò)一位輸后面的參數(shù)
命名可選:{}, 通過(guò)key:value任意輸入?yún)?shù)

main(List<String> args) {
  // 1.將函數(shù)賦值給一個(gè)變量
  var bar = foo;
  print(bar);

  // 2.將函數(shù)作為另一個(gè)函數(shù)的參數(shù)
  test(foo);

  // 3.將函數(shù)作為另一個(gè)函數(shù)的返回值
  var func =getFunc();
  func('kobe');
}

// 1.定義一個(gè)函數(shù)
foo(String name) {
  print('傳入的name:$name');
}

// 2.將函數(shù)作為另外一個(gè)函數(shù)的參數(shù)
test(Function func) {
  func('coderwhy');
}

// 3.將函數(shù)作為另一個(gè)函數(shù)的返回值
getFunc() {
  return foo;
}

不能在main 中定義:

void func1(String name, [int x = 0, int y = 0]) {
  print(name);
  if (x != 0) {
    print(x);
  }
  if (y != 0) {
    print(y);
  }
}

void func2(String name, {int x = 0, int y = 0}) {
  print(name);
  if (x != 0) {
    print(x);
  }
  if (y != 0) {
    print(y);
  }
}

七累魔、類 (待完善)

1.默認(rèn)所有的類都繼承自object類

八摔笤、常用運(yùn)算

級(jí)聯(lián)運(yùn)算符:對(duì)一個(gè)對(duì)象連續(xù)操作時(shí),用..代替類名.

final p1 = Person();
  p1.name = 'why';
  p1.run();
  p1.eat();
  p1.swim();

替換如下:

final p2 = Person()
             ..name = "why"
             ..run()
             ..eat()
             ..swim();

?? = 賦值操作
var a = null;
var b = a ?? 3;//A ?? B 的作用:如果A
print(b);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垦写,一起剝皮案震驚了整個(gè)濱河市吕世,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梯投,老刑警劉巖命辖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件况毅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尔艇,警方通過(guò)查閱死者的電腦和手機(jī)尔许,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)终娃,“玉大人味廊,你說(shuō)我怎么就攤上這事√母” “怎么了余佛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)窍荧。 經(jīng)常有香客問(wèn)我辉巡,道長(zhǎng),這世上最難降的妖魔是什么蕊退? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任郊楣,我火速辦了婚禮,結(jié)果婚禮上瓤荔,老公的妹妹穿的比我還像新娘净蚤。我一直安慰自己,他們只是感情好茉贡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布塞栅。 她就那樣靜靜地躺著,像睡著了一般腔丧。 火紅的嫁衣襯著肌膚如雪放椰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天愉粤,我揣著相機(jī)與錄音砾医,去河邊找鬼。 笑死衣厘,一個(gè)胖子當(dāng)著我的面吹牛如蚜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播影暴,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼错邦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了型宙?” 一聲冷哼從身側(cè)響起撬呢,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妆兑,沒(méi)想到半個(gè)月后魂拦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體毛仪,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年芯勘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箱靴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荷愕,死狀恐怖衡怀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情路翻,我是刑警寧澤狈癞,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布茄靠,位于F島的核電站茂契,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慨绳。R本人自食惡果不足惜掉冶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脐雪。 院中可真熱鬧厌小,春花似錦、人聲如沸战秋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脂信。三九已至癣蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狰闪,已是汗流浹背疯搅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埋泵,地道東北人幔欧。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丽声,于是被迫代替她去往敵國(guó)和親礁蔗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容