Dart語法解析

1.dart整理:

  • 使用場景:跨平臺/web/服務(wù)器或者腳本
  • SDK的安裝和升級:
    • dart sdk安裝和升級 mac上都是借助于home brew工具腿椎,命令如下:
      brew tap dart-lang/dart brew install dart -devel
      借助于命令 brew info dart 校驗sdk是否安裝成功桌硫。

2.dart語法整理:

  • Dart和java一樣是編譯型語言,Dart Runtime運行前需要編譯啃炸,Dart也是面向?qū)ο蟮恼Z言鞍泉。

  • 變量和常量

    • dart的變量和常量和java類似只是對應(yīng)的關(guān)鍵詞不一樣。
    • dart變量和常量的聲明沒有作用域一說肮帐,變量的聲明依賴關(guān)鍵字var 即:var a = 10咖驮,類似于js边器,聲明時可以不指定對應(yīng)的類型,在第一次使用賦值的時候就決定了其類型 后續(xù)不能夠?qū)ζ漕愋瓦M行修改托修,賦值其他類型出現(xiàn)異常崩潰忘巧。
    • dart常量兩個關(guān)鍵詞final和const,兩只的區(qū)別是:final 聲明常量僅能賦值一次和java類似睦刃,const聲明的常量僅在編譯階段賦值一次 在運行階段可以賦值砚嘴。
    • 關(guān)鍵詞dynamic 聲明變量可以忽略變量所屬的類型檢查即:dynamic a = 10,后續(xù) a="abc"是成立的因為忽略了類型檢查涩拙。
    • dart面向?qū)ο缶幊糖沂菑婎愋途幊陶Z言际长,object和java類似是所有對象類的父類,object aa是成立的兴泥。
  • dart和java類似工育,java中的基本類型在dart中都存在,num數(shù)值型搓彻,字符串如绸,布爾值,list列表旭贬,map怔接。

    • dart中的數(shù)值型僅有int和double型,變量聲明的時候三個關(guān)鍵字都可以用即:num/int/double稀轨,區(qū)別是后面兩個指定了對應(yīng)的數(shù)據(jù)類型扼脐,前面的num是后面兩個的父類即num聲明變量即可以賦值int也可以賦值double。
    • java數(shù)值型的運算符在dart基本都可以使用:+/-/*///%等等奋刽,且類似于java中的math工具類瓦侮,數(shù)值型變量提供了一系列的api進行數(shù)值計算。
    • dart中的字符串使用''/""/創(chuàng)建杨名,和java不同的是可以使用""/'" a "'創(chuàng)建多行字符串,java創(chuàng)建多行字符串通常是使用+號拼接猖毫。
    • dart 使用r創(chuàng)建raw字符串台谍,當前僅作記錄后面使用時候再做補充處理。
    • dart字符串的拼接可以使用空格符/加號拼接
    • dart字符串可以使用==校驗是否相等吁断,另外和java類似每一個字符串對象也存在一系列的api用于字符串的處理趁蕊。
    • dart不支持字符串和其他類型直接拼接,其他類型在字符串中展示需要借助于即String aa = "abcdef{cc=10}".此用法在其他語言kotlin/grrove都在使用仔役。
    • dart 中的布爾值 true和false兩種值且屬于編譯時常量掷伙。
    • dart支持斷言邏輯,即assert斷言使用方法assert(a==b),若a不等于b則打斷當前程序的執(zhí)行又兵,在代碼調(diào)試中非常有用的一種代碼編程方式任柜。
    • dart支持list列表卒废,但是dart中的list列表等同于java中的數(shù)組,構(gòu)造到賦值都和java數(shù)組相似即:
      list list = [1,2,3];list list = new list;list[0] = 3;list也提供了一系列的api用于list的操作處理宙地。
    • dart也支持map 鍵值對數(shù)據(jù)結(jié)構(gòu)摔认,不過和list列表相似,也是和java中的數(shù)組相似宅粥,構(gòu)造和賦值類似参袱,即:map map = ['aa':'value','bb':'value'],
      map map = new map();map['key'] = "",map['value'] = "";
    • dart 提供了關(guān)鍵字in用于遍歷list獲取每一個item秽梅,kotlin和grrove也存在相同的用法抹蚀。
  • dart語句和函數(shù)

    • dart的條件語句和java類似也是if/else語句,switch語句企垦,三目運算符即a>b? c:d环壤。
    • dart條件語句的特殊語法:String name2 = name?? "哈哈" 表示name的值賦值給name2,若name為空則將默認值哈哈賦值給name2. ??表示提供對應(yīng)的默認值竹观。
    • dart 循環(huán)語句:for/while/do while 三種方式镐捧,使用關(guān)鍵字in遍歷list和for遍歷list一致,雙循環(huán)和java一致臭增,可以使用關(guān)鍵字break打斷循環(huán)懂酱。此外dart存在兩個特殊的關(guān)鍵字outerlooper和innerlooper指示雙循環(huán)的時候的內(nèi)循環(huán)和外循環(huán),后續(xù)再補充誊抛。
    • dart取商運算即~/ 比如12~/7 = 1(取整int)
    • 級聯(lián)運算符.. 類似于java的鏈式api調(diào)用列牺。
    • as is is!:類似于java的類型校驗拗窃,as:屬于某種類型瞎领,is/is!: 對象具有指定的類型前面返回true后面返回FALSE随夸。
  • Dart的函數(shù)語法:

    • 函數(shù)包含返回值+函數(shù)名+參數(shù)九默,和java類似但是Dart沒有權(quán)限的關(guān)鍵字,類宾毒,屬性驼修,函數(shù)只有兩種權(quán)限默認和私有,私有關(guān)鍵字依賴于_即:class _A表示class a是一個私有類诈铛。
    • Dart函數(shù)可以聲明返回值也可以不聲明返回值,和java不同的是dart的函數(shù)有著默認的返回值幢竹,即聲明了返回值沒有返回在編譯階段是不報錯的耳峦,java不可以焕毫,但是默認返回值是空驶乾,所以dart中判空是常規(guī)必須的操作。
    • Dart的函數(shù)參數(shù)特性:
      • 函數(shù)聲明了參數(shù)但是在函數(shù)調(diào)用的時候可以不傳參數(shù)甚至一個參數(shù)都不傳遞轻掩,但是需要注意的是傳遞參數(shù)的順序和約定的順序保持一致。
      • 必傳參數(shù):使用關(guān)鍵字@required標識參數(shù)說明函數(shù)調(diào)用的時候的參數(shù)必須傳遞唇牧。
      • []標識符標識的參數(shù)為可選參數(shù)類似于java中的可選參數(shù),java使用....標識聚唐,函數(shù)調(diào)用的時候可傳遞可不傳遞。
      • 函數(shù)參數(shù)過多時杆查,在編碼階段比較混亂容易出問題,java依賴于代碼提示和注釋亲桦,dart可以在函數(shù)調(diào)用的時候指明參數(shù)的名字,比如height參數(shù)調(diào)用時可以使用height:20(特別注意不是等號是:)
      • 函數(shù)的參數(shù)在聲明的時候可以指定默認值客峭,即
        void xxxx(int x = 21,int y = 34){}
      • 函數(shù)可以作為參數(shù)傳遞,此為dart特性舔琅,java思維比較容易混淆等恐,比如:
beiDiaoYongFun(String hehe){  
print("asdfadfasdfasdfas11111111111111111111111"+hehe);
}
diaoYong(action){  
action("8797987979797");
}
void main() {  
diaoYong(beiDiaoYongFun);
}

結(jié)果:


函數(shù)作為參數(shù)調(diào)用

和java不同雖然java也可以調(diào)用的方法作為參數(shù)备蚓,但是java是將方法值作為后續(xù)的方法的參數(shù)课蔬,dart是執(zhí)行函數(shù)的語句,比如list.foreach(prient)的執(zhí)行順序是先遍歷list然后將list的每一個item打印出來郊尝。

  • 承接上面的參數(shù):
    * 函數(shù)可以作為變量二跋。
    * dart引入了箭頭函數(shù)(=>)kotlin也存在,即使用箭頭函數(shù)可以替代函數(shù)的大括號流昏,有返回值的函數(shù)也可以直接返回且不需要return關(guān)鍵字扎即。

  • dart的異常抓獲和java類似,try catch横缔,finally铺遂,不同的是提供了on關(guān)鍵字衫哥,on關(guān)鍵字可以指明異常是否等于給定的異常茎刚,類似于java的catch中使用if語句校驗異常類型。

  • dart中類和java中的類的語法基本一致撤逢,需要注意的就是dart中的類的構(gòu)造函數(shù):類有默認構(gòu)造函數(shù)膛锭,也可以自定義構(gòu)造函數(shù)粮坞,但是構(gòu)造函數(shù)的自定義和java不一樣,(或許dart中函數(shù)名不能多態(tài)初狰,待驗證)莫杈,dart中的類僅可以存在一個和類名相同的構(gòu)造方法,dart的自定義構(gòu)造方法格式為:類名.函數(shù)名{}奢入,這樣在外面就可以調(diào)用類對象對應(yīng)的構(gòu)造方法筝闹。

  • dart中類屬性存在默認的set和get方法,也可以自定義腥光,使用set和get兩個關(guān)鍵字关顷,平時使用感覺沒有意義,還有類的繼承方式和java一致武福。

    • dart中存在繼承议双,接口實現(xiàn),繼承和java一樣單繼承捉片,類存在抽象類平痰,子類覆寫父類的api方法需要注解@override標識。
    • dart不存在interface關(guān)鍵字伍纫,任何一個類都能夠被實現(xiàn)宗雇,方法都能夠被覆寫,同樣使用注解@override標識即可翻斟。
    • dart中除了繼承和接口實現(xiàn)外還存在混合逾礁,實現(xiàn)上使用關(guān)鍵字with標識,混合標識著當前類可以拿到混合類的api方法使用或者覆寫访惜,混合支持多個類混合嘹履。
    • 三者的優(yōu)先級:混合>繼承>接口實現(xiàn)
  • dart支持泛型且泛型的定義和java類似。

參考文章:
dart官網(wǎng)學習
dart中國

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末债热,一起剝皮案震驚了整個濱河市砾嫉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焕刮,老刑警劉巖墙杯,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件高镐,死亡現(xiàn)場離奇詭異,居然都是意外死亡观腊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門苫耸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褪子,“玉大人骗村,你說我怎么就攤上這事∮嬖” “怎么了信轿?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵财忽,是天一觀的道長。 經(jīng)常有香客問我紧唱,道長隶校,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任绰疤,我火速辦了婚禮轻庆,結(jié)果婚禮上敛劝,老公的妹妹穿的比我還像新娘。我一直安慰自己蛾方,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著五芝,像睡著了一般辕万。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醉途,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天隘擎,我揣著相機與錄音凉夯,去河邊找鬼。 笑死震桶,一個胖子當著我的面吹牛征绎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柴墩,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼拐邪,長吁一口氣:“原來是場噩夢啊……” “哼扎阶!你這毒婦竟也來了婶芭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤惰赋,失蹤者是張志新(化名)和其女友劉穎赁濒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挪拟,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年惯雳,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸿摇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸵钝,死狀恐怖恩商,靈堂內(nèi)的尸體忽然破棺而出必逆,到底是詐尸還是另有隱情,我是刑警寧澤粟矿,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布陌粹,位于F島的核電站福压,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蒙幻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一邮破、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矫渔,春花似錦摧莽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至受裹,卻和暖如春虏束,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镇匀。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幸缕,地道東北人晰韵。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓雪猪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親只恨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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