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

Dart特點(diǎn):

1、基于JIT的快速開發(fā)周期:
flutter在開發(fā)階段采用了JIT模式,避免了每次改動(dòng)都要進(jìn)行編譯,節(jié)省開發(fā)時(shí)間(運(yùn)行的時(shí)候再去編譯成機(jī)器碼)

2、基于AOT的發(fā)布包:
flutter在發(fā)布時(shí)可以通過(guò)AOT生成高效的ARM代碼以保證應(yīng)用性能铝耻。
(提前將我們的代碼編譯成機(jī)器碼)

3、單線程
不需要鎖,不存在數(shù)據(jù)競(jìng)爭(zhēng)和變量狀態(tài)同步瓢捉,也沒有線程上下文切換的性能順灝和鎖導(dǎo)致的卡頓

4频丘、垃圾回收
多生代(新生代:復(fù)制-清除算法、老生代:標(biāo)記-清除算法泡态。第一次創(chuàng)建的時(shí)候就是新生代搂漠,每隔一段時(shí)間檢查一遍變量,有用的就保留某弦,沒用的清除桐汤,這些存活下來(lái)的就會(huì)標(biāo)記一下,到了一定數(shù)量就會(huì)進(jìn)入老生代靶壮,老生代的對(duì)象很少被清理)無(wú)鎖垃圾回收器怔毛,專門為UI框架中常見的大量widgets對(duì)象創(chuàng)建和銷毀優(yōu)化

1、變量

1.1 var與dynamic

void main() {
  // 方法可以不寫在類中腾降,獨(dú)立存在
  int a = 0; // 聲明變量拣度,可以直接用int,與java類型

  var b = "哈哈";
  // b = 10; // 報(bào)錯(cuò)螃壤,聲明變量賦值的那一刻抗果,就決定了它的類型。b是string類型

  var c; // 沒有給變量c賦值奸晴,那c的值就是null冤馏,類型是object。下面就可以任意賦值
  c = "嘿嘿";
  c = 10;

  // dynamic關(guān)鍵字寄啼,意思是動(dòng)態(tài)的逮光。不是在編譯的時(shí)候來(lái)確定變量的實(shí)際類型,而是在運(yùn)行的時(shí)候動(dòng)態(tài)的確定類型
  // 效率沒有靜態(tài)的高辕录。
  // 在不確定類型時(shí)傳入睦霎,不經(jīng)常使用
  dynamic d = "呵呵";
  d = 20;

  // 以下三個(gè)的區(qū)別。是編譯和運(yùn)行的時(shí)候走诞,底層實(shí)現(xiàn)上存在區(qū)別
  Object i = 1; // 在編譯的時(shí)候是object,任意類型蛤高。它的類型由它的值確定
  var j = 1; // 在編譯期確定了j的類型是int
  dynamic z = 1; // 在運(yùn)行時(shí)才確定z的類型蚣旱,它的類型也是由它的值確定
}

2.2 final與const

void main2() {
  final i = 1; // final是運(yùn)行時(shí)常量
  // i = 2; // 報(bào)錯(cuò),final修飾的變量不能再賦值戴陡。和java中用法一樣

  const j = 1; // const是編譯器常量塞绿,在編譯期就已經(jīng)確定了值,運(yùn)行效率比f(wàn)inal高
  // j =2; // 報(bào)錯(cuò)恤批,const修飾的變量也不能再賦值异吻。

  // const z = i; // 報(bào)錯(cuò),i是運(yùn)行時(shí)才確定值,不能賦值給編譯期就需要確定的變量
  const z = j; // 這個(gè)是可以的诀浪,都是編譯器就能確定的值
  const z2 = j + 1;

  final k = z2; // 這個(gè)也可以的棋返。可以將編譯時(shí)就確定的值賦值給運(yùn)行時(shí)才確定的變量
}

2雷猪、七大內(nèi)置類型

數(shù)值類型(num)睛竣、字符串類型(String)、布爾類型(bool)求摇、數(shù)組類型(List)射沟、映射類型(Map)、Unicode(Runes)与境、標(biāo)識(shí)符(Symbols)

2.1 數(shù)值類型(num)

void main() {
  // java中的int占4個(gè)字節(jié)验夯,dart中的int 是動(dòng)態(tài)確定字節(jié)大小的
  // 在編碼的時(shí)候,可以將int當(dāng)成java的short摔刁、int挥转、long來(lái)使用,
  // 如果我們寫的dart代碼超過(guò)了4個(gè)字節(jié)簸搞,那么dart會(huì)將其編譯成類似java中的long類型
  // 否則編譯成java中的short或者int
  int i = 1; // 占1個(gè)字符
  int i1 = 2; // 占2個(gè)字符
  int i2 = 3; // 占2個(gè)字符
  int i3 = 10; // 占4個(gè)字符
}

2.2 字符串類型(String)

void main() {
  String str = "haha"; //聲明和java中的string一樣
  String str2 = "${str}hehe"; // 字符串的拼接和kotlin中的類似

  String str3 = 'heihei'; // dart中既可以使用單引號(hào)扁位,也可以使用雙引號(hào),沒有區(qū)別
  // 其好處是趁俊,可以混合使用域仇。比如說(shuō)在java中如果想要打印帶有雙引號(hào)的字符串,就需要使用轉(zhuǎn)義
  String str4 = "\"test\""; // java中寫法寺擂。dart也可以這樣寫暇务,但還有下面兩種寫法。
  String str5 = "'test'"; // dart中就可以混合寫怔软,寫法2
  String str6 = '"test2"'; // dart中寫法3

  // 如果我們想在dart中打印帶轉(zhuǎn)義字符的字符串垦细,比如打印 /n ,也需要使用轉(zhuǎn)義
  String str7 = "\\n";
  // 也可以使用r前綴,r的意思就是raw,原始挡逼。舍棄字符串中所有的字表符括改、換行符、空格符等
  String str8 = r"\n";

  // 三個(gè)雙引號(hào)用來(lái)聲明多行字符串家坎。與kotlin中類似
  String str9 = """
  aaaa
  bbbbbb
  cccccccc
  """;
}

2.3 布爾類型(bool)

void main() {
  bool b = false;
}

2.4 數(shù)組類型(List)

void main() {
  // List<String> list = new List(); // 可以省略new
  List<int> list1 = [1, 2, 3, 4]; // 可以直接用中括號(hào)進(jìn)行賦值嘱能,初始列表
  // 像java數(shù)組一樣通過(guò)下標(biāo)取元素,和kotlin類似
  var item = list1[0];

  // 遍歷數(shù)組方式1,(模板快捷鍵iter)
  for (var o in list1) {}

  // 遍歷數(shù)組方式2,(模板快捷鍵itar)
  for (var i = 0; i < list1.length; ++i) {
    var o = list1[i];
  }

  // 在初始列表前添加關(guān)鍵字const
  // const前面學(xué)過(guò)虱疏,表示編譯期就已經(jīng)確定了的值惹骂,不可修改。這里表明這個(gè)集合對(duì)象是不可變的做瞪,不能再add元素了
  List<int> list2 = const [1, 2, 3, 4];
  // list2.add(5); // 運(yùn)行時(shí)報(bào)錯(cuò)
  list2 = [1, 2]; // 不報(bào)錯(cuò)

  // 如果const修飾的是變量对粪,也就是引用,那么變量就不能再重新引用其他對(duì)象了,也不能添加元素
  const List<int> list3 = [1, 2, 3, 4];
  // list3 = [1,2]; // 編譯報(bào)錯(cuò)
  // list3.add(5); // 運(yùn)行時(shí)報(bào)錯(cuò)
}

2.5 映射類型(Map)

void main() {
  // key和value用 : 分隔
  Map<int, int> map = {1: 2, 2: 3, 3: 4};
  var value = map[1]; // 中括號(hào)里的是key著拭,得到的值是value
  map[1] = 1; // 修改value

  // 用const聲明和list是一樣的纱扭。const修飾對(duì)象,不可添加/修改元素
  var map1 = const {1: 2, 2: 3, 3: 4};
  // map1[3] = 100;// 添加元素茫死,運(yùn)行報(bào)錯(cuò)

  // const Map<int, int> map2 = {1: 2, 2: 3, 3: 4};
  // map2[3] = 100;// 添加元素跪但,運(yùn)行報(bào)錯(cuò)

  const Map<int, int> map2 = {1: 2, 2: 3, 3: 4};
  // map2[3] = 100;// 添加元素,運(yùn)行報(bào)錯(cuò)
  // map2 = {1: 2, 2: 3};// 運(yùn)行報(bào)錯(cuò)

  // 遍歷:迭代器的遍歷
  var keys = map2.keys;
  for (var value1 in keys) {}
}

2.6 Unicode(Runes)/ 標(biāo)識(shí)符(Symbols)

Unicode Runes:特殊字符表示類(Unicode32峦萎,字符的編碼標(biāo)準(zhǔn))屡久。不常用

// Symbols 標(biāo)識(shí)符。不常用
void main() {
  var a = #afda;
  print(a.runtimeType);// 打印的結(jié)果就是Symbol
  // 可以用于switch語(yǔ)句
}

3爱榔、操作符

3.1 類型轉(zhuǎn)換:as

void main() {
  var j = 1;
  var i = j as int; // 類型轉(zhuǎn)換被环,類似kotlin,java中的強(qiáng)轉(zhuǎn)
  print('i=$i');

3.2 類型判斷 :is 详幽、 is!

void main() {
  Object i1 = 1;
  var isInt = i1 is int; // 類型判斷筛欢,類似kotlin,java中的instantof
  var isBool = i1 is! bool; // 判斷對(duì)象不是某個(gè)類型

3.3 賦值操作符:??=

void main() {
  var a;
  if (a == null) {
    a = "賦值了";
  }
  a ??= "我的值為null"; //安全賦值唇聘。如果k的值為null版姑,則輸出等號(hào)后面的值。相當(dāng)于kotlin中的?=
}

3.4 條件表達(dá)式:

void main() {
  // 三目表達(dá)式 ? :
  var c = true ? "t" : "f"; // 與java用法一樣

  // ??
  var d;
  var d1 = 1;

  var e = d ?? 2; // e = 2
  var e1 = d1 ?? 2; // e1 = 1
}

3.5 級(jí)聯(lián)操作符:..

void main() {
  // 使用兩個(gè)..來(lái)實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用
  Builder()
    ..aa()
    ..bbbb() // bbbb()的返回值會(huì)被忽略
    ..ccccccc();
}
class Builder {
  void aa() {}

  bool bbbb() {
    return true;
  }

  void ccccccc() {}
}

3.6 安全操作符:?.

void main() {
  // 類似kotlin中的
  var str = null;
  print(str?.length); // 如果str為null迟郎,不執(zhí)行str.length()
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剥险,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宪肖,更是在濱河造成了極大的恐慌表制,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件控乾,死亡現(xiàn)場(chǎng)離奇詭異么介,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜕衡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門壤短,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人慨仿,你說(shuō)我怎么就攤上這事鸽扁。” “怎么了镶骗?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躲雅。 經(jīng)常有香客問(wèn)我鼎姊,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任相寇,我火速辦了婚禮慰于,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唤衫。我一直安慰自己婆赠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布佳励。 她就那樣靜靜地躺著休里,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赃承。 梳的紋絲不亂的頭發(fā)上妙黍,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音瞧剖,去河邊找鬼拭嫁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抓于,可吹牛的內(nèi)容都是我干的做粤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼捉撮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怕品!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起呕缭,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堵泽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恢总,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迎罗,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年片仿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纹安。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砂豌,死狀恐怖厢岂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阳距,我是刑警寧澤塔粒,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站筐摘,受9級(jí)特大地震影響卒茬,放射性物質(zhì)發(fā)生泄漏船老。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一圃酵、第九天 我趴在偏房一處隱蔽的房頂上張望柳畔。 院中可真熱鬧,春花似錦郭赐、人聲如沸薪韩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俘陷。三九已至,卻和暖如春舀锨,著一層夾襖步出監(jiān)牢的瞬間岭洲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工坎匿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盾剩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓替蔬,卻偏偏與公主長(zhǎng)得像告私,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子承桥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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

  • 了解Dart 強(qiáng)類型編程語(yǔ)言,Dart之下一切皆對(duì)象 Dart 是一種跨平臺(tái)的客戶端開發(fā)語(yǔ)言驻粟。具有專門為客戶端優(yōu)化...
    youseewhat閱讀 10,168評(píng)論 0 3
  • Dart的所有東西都是對(duì)象,包括數(shù)字凶异,函數(shù)等蜀撑。 它們都繼承自O(shè)bject,默認(rèn)是都是null(包括數(shù)字)剩彬,所以數(shù)字...
    Visen遙清風(fēng)閱讀 1,488評(píng)論 0 1
  • 一. Dart入口方法 每一個(gè)flutter項(xiàng)目的lib目錄里面都有一個(gè)main.dart酷麦。這個(gè)文件就是flutt...
    騎馬縱天下閱讀 2,518評(píng)論 0 1
  • 目錄 參考資料 語(yǔ)言特性 關(guān)鍵字 變量與常量 數(shù)據(jù)類型 運(yùn)算符 operators 控制流程語(yǔ)句 異常 Excep...
    GuoDongW閱讀 185,006評(píng)論 22 342
  • 1、前言: 最近在學(xué)習(xí)Flutter喉恋,作為Flutter的編程語(yǔ)言沃饶,Dart語(yǔ)言語(yǔ)法的學(xué)習(xí)自然就編程重中之重。本文...
    Yagami3zZ閱讀 1,489評(píng)論 0 0