1.dart整理:
- 使用場景:跨平臺/web/服務(wù)器或者腳本
- SDK的安裝和升級:
- dart sdk安裝和升級 mac上都是借助于home brew工具腿椎,命令如下:
brew tap dart-lang/dart brew install dart -devel
借助于命令 brew info dart 校驗sdk是否安裝成功桌硫。
- dart sdk安裝和升級 mac上都是借助于home brew工具腿椎,命令如下:
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不支持字符串和其他類型直接拼接,其他類型在字符串中展示需要借助于{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é)果:
和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中國