Dart語法學(xué)習(xí)1

前言 為什么學(xué)習(xí)Dart娃胆?


  1. Dart語法簡潔高效,擁有數(shù)以千計(jì)的packages 生態(tài)系統(tǒng)

  2. Dart 提供提前編譯優(yōu)化斑司,以在移動(dòng)設(shè)備和 web 上實(shí)現(xiàn)可預(yù)測的高性能和快速啟動(dòng)

  3. Dart 可以編譯成 ARM 和 x86 代碼,因此 Dart 移動(dòng)應(yīng)用程序可以在 iOS,Android 及 更高版本上實(shí)現(xiàn)本地運(yùn)行。 對于 web 應(yīng)用程序碍庵,Dart 可以轉(zhuǎn)換為 JavaScript

4.Dart 是面向?qū)ο蟮木幊陶Z言,語法風(fēng)格對于許多現(xiàn)有的開發(fā)人員來說都很熟悉悟狱。 如果您有一定的面向?qū)ο缶幊陶Z言的基礎(chǔ) 静浴,那么使用 Dart 也就是分分鐘的事情

5.Dart 可以便捷的進(jìn)行響應(yīng)式編程。由于快速對象分配和垃圾收集器的實(shí)現(xiàn)挤渐, 對于管理短期對象(比如 UI 小部件)苹享, Dart 更加高效。 Dart 可以通過 Future Stream 的特性和API實(shí)現(xiàn)異步編程浴麻。

  1. 同時(shí)也為Flutter學(xué)習(xí)打下一定的基礎(chǔ)

二. 語言特點(diǎn)

1. Dart是一門純粹的面向?qū)ο笳Z言,在Dart中一切皆對象;函數(shù)(函數(shù)可以作為參數(shù)傳遞)得问,字符串,數(shù)字等都是對象软免。

如下代碼宫纬,數(shù)字可以調(diào)用對象方法

var text = 666.toString();
print(text);

函數(shù)作為對象傳遞

var list = [1, 2, 3];
  printEle(element) {
    print("輸出值 is $element");
  }
 list.forEach(printEle);

系統(tǒng)函數(shù)forEach參數(shù)要求傳一個(gè)函數(shù)

 /**
   * Applies the function [f] to each element of this collection in iteration
   * order.
   */
  void forEach(void f(E element)) {
    for (E element in this) f(element);
  }
2. Dart是一門強(qiáng)類型語言(js是一門弱類型語言),但也支持一些弱類型特性如:var膏萧、object漓骚、dynamic等;
  • var 實(shí)際上是編譯器語法糖榛泛,聲明變量后會自動(dòng)推導(dǎo)類型蝌蹂,不可更改賦值類型

  • dynamic 表示動(dòng)態(tài)任意類型,可以賦值任意類型挟鸠,編譯階段不檢測類型叉信,被編譯后是object類型

  • object 表示動(dòng)態(tài)任意類型亩冬,可以賦值任意類型艘希,編譯階段檢查類型

  • 測試以下代碼(可以打開注釋硼身,方便理解)*

  var p1 = 1;
  Object p2 = 2;
  dynamic p3 = 3;
  //p1 = 'A';編譯期會報(bào)錯(cuò);A value of type 'String' can't be assigned to a variable of type 'int'.
  // p1 = 'A';
  // p2,p3改變類型不會報(bào)錯(cuò),因?yàn)槎急硎救我忸愋?  p2 = 'B';
  p3 = 'C';

//p2 因?yàn)镺bject編譯期會檢查類型覆享,發(fā)現(xiàn)p2沒有未定義 run函數(shù) 而報(bào)錯(cuò) ;The method 'run' isn't defined for the type 'Object'.
  // p2.run();
//p3  dynamic編譯器不檢測類型佳遂,不會報(bào)錯(cuò),運(yùn)行時(shí)拋出異常撒顿;NoSuchMethodError: Class 'String' has no instance method 'run'.
  p3.run();
  print(p1);
  print(p2);
  print(p3);
  1. 兼具編譯性語言特點(diǎn)和解釋性語言特點(diǎn)
  • 對開發(fā)web應(yīng)用來講:dart會被轉(zhuǎn)譯成js
  • 對app丑罪、服務(wù)端、桌面應(yīng)用講:dart提供了開發(fā)模式凤壁,通過vm解釋執(zhí)行吩屹,支持熱更新,具有解釋型語言特點(diǎn)拧抖;也提供了生產(chǎn)模式煤搜,通過編譯成機(jī)器碼執(zhí)行,具有編譯型語言特點(diǎn)

三.開始學(xué)習(xí)吧

1. Dart支持以下基本數(shù)據(jù)類型:
  • Numbers
  • Strings
  • Booleans
  • List(數(shù)組)
  • Maps(字典鍵值對)


2. 變量聲明:
  • 可以顯示聲明指明類型唧席,方便編譯器做一些靜態(tài)檢查如:
    int age = 18;
  • 可以var聲明類型擦盾,變量初始化后自動(dòng)推導(dǎo)類型,并且不可更改賦值類型
    var p1 = 1;
    注意以下寫法也是正確的:
 var name;
  name = "無名氏";
  name = 18;
  name.run();
  print(name);

聲明時(shí)不賦值則等同于聲明了一個(gè)動(dòng)態(tài)類型(dynamic)變量


  1. static final const關(guān)鍵字
  • static:用于修飾成員變量淌哟,這個(gè)變量是屬于的迹卢,而不是屬于對象的,除此之外沒有其他別的含義了
  • final修飾的變量不許進(jìn)行初始化徒仓,賦值之后不能再改變腐碱;編譯期和運(yùn)行期確定值都可以
  • const修飾變量,必須進(jìn)行初始化掉弛,賦值之后不能再改變喻杈,該變量必須編譯器就確定,否則會報(bào)錯(cuò)
getInfo() {
    return "個(gè)人信息";
  }

  const name = "我愛學(xué)習(xí)啊";
 //報(bào)錯(cuò)狰晚,因?yàn)榫幾g期間不能確定info值;Const variables must be initialized with a constant value.
  const info = getInfo();

  final name1 = "我也愛學(xué)習(xí)";
//不報(bào)錯(cuò)
  final info1 = getInfo();

const還可以用來構(gòu)造對象筒饰;表明該對象在編譯期就能夠完全確定,所以該對象類所有屬性都必須使用final 或者 const修飾壁晒,也就是說該對象所有屬性都是不能改變的既該對象是不可變的瓷们;

void main() {
  People p = const People("flutter");
}

class People {
  final name;
  const People(name) : this.name = name;
}

如果對象類屬性不適用final修飾,則該對象某個(gè)屬性是可變的秒咐,那么該對象就不能被稱為是不可變的谬晕,所以會報(bào)錯(cuò);

void main() {
  People p = const People("flutter");
}

class People {
  final name;
//也可以
  static const height = 180;
  int age;
//Can't define a const constructor for a class with non-final fields.
  const People(name) : this.name = name;
}

const構(gòu)造集合,說明該集合完全不可變携取,類似OC中不可變集合攒钳;

  const array = const [1, 2, 3];
  array[0] = 0;
  //運(yùn)行時(shí)報(bào)錯(cuò);Unhandled Exception: Unsupported operation: Cannot modify an    unmodifiable list
  print(array);

相同的const變量雷滋,內(nèi)存中只會創(chuàng)建一次

  var list1 = const [1, 2, 3];
  var list2 = const [1, 2, 3];
  //判斷是否指向同一個(gè)對象
  bool result = identical(list1, list2);
  if (result) {
    print("是同一個(gè)對象");
  } else {
    print("不是同一個(gè)對象");
  }

輸出flutter: 是同一個(gè)對象


  1. 變量未初始化的默認(rèn)值:
    在Dart中未初始化變量都為null不撑,null也是Object子類
  var name;
  int age;
  Object people;
  List list;
  dynamic dy;
  print(name);
  print(age);
  print(people);
  print(list);
  print(dy);

全輸出null



5.類型判斷:
a is Object去判斷

//輸出 true
print(null is Object);
//輸出 true debug下輸出文兢,release忽略
assert(null is Object);


  1. 類型轉(zhuǎn)換:
    Dart是強(qiáng)類型語言,所以需要顯示轉(zhuǎn)換焕檬。常見的轉(zhuǎn)換:
  String aa = "111";
  //String-> int
  int bb = int.parse(aa);
  // int -> double
  double cc = bb.toDouble();
  // String -> double
  double dd = double.parse("1.1");
  // num -> String
  aa = cc.toString();
  //double指定位數(shù) ->String
  String ee = 3.141592.toStringAsFixed(3); //結(jié)果為3.141
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姆坚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子实愚,更是在濱河造成了極大的恐慌兼呵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腊敲,死亡現(xiàn)場離奇詭異击喂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碰辅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門茫负,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乎赴,你說我怎么就攤上這事忍法。” “怎么了榕吼?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵饿序,是天一觀的道長。 經(jīng)常有香客問我羹蚣,道長原探,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任顽素,我火速辦了婚禮咽弦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胁出。我一直安慰自己型型,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布全蝶。 她就那樣靜靜地躺著闹蒜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抑淫。 梳的紋絲不亂的頭發(fā)上绷落,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音始苇,去河邊找鬼砌烁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛催式,可吹牛的內(nèi)容都是我干的函喉。 我是一名探鬼主播避归,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼函似!你這毒婦竟也來了槐脏?” 一聲冷哼從身側(cè)響起喉童,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撇寞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后堂氯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔑担,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年咽白,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啤握。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晶框,死狀恐怖排抬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情授段,我是刑警寧澤蹲蒲,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站侵贵,受9級特大地震影響届搁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窍育,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一卡睦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漱抓,春花似錦表锻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至补胚,卻和暖如春码耐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溶其。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工骚腥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓶逃。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓束铭,卻偏偏與公主長得像廓块,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子契沫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355