Dart 基礎(chǔ)知識(一)

文檔地址

什么是 Dart?

? ? Dart 是一種?易于學(xué)習(xí)、?易于擴(kuò)展锅论、并且可以部署到?任何地方(跨平臺) 的?應(yīng)用?編程?語言讼溺。我們用 Dart 來 開發(fā) flutter;

為什么 Dart?

? ?因為 flutter 選擇 Dart 作為 其 開發(fā)的 語言最易,所以 為了開發(fā)?flutter? 就必須學(xué)習(xí) Dart怒坯;

搭建開發(fā)環(huán)境

? ?獲取Dart

? ?Dart SDK下載地址


前置概念

? ??在學(xué)習(xí) Dart 的時候炫狱,請牢記下面一些 事實和 概念:

? ? 1.?所有能夠使用變量引用的都是 對象, 每個對象都是一個類?的實例剔猿。在 Dart 中 甚至連 數(shù)字视译、方法和?null?都是對象。所有的對象都繼承于 Object 類归敬;

? ? 2. 使用靜態(tài)類型可以更清晰的表明你的意圖酷含,并且可以讓靜態(tài)分析工具來分析你的代碼,然后進(jìn)行類型推斷汪茧,聲明變量時候指定類型 并不是牽制性的(在調(diào)試代碼的時候你可能注意到 沒有指定類型的變量的類型為?dynamic)椅亚;

? ? 3. Dart 在運(yùn)行之前會先解析你的代碼。你可以通過使用 類型或者編譯時常量來幫助 Dart 去捕獲異常以及 讓代碼運(yùn)行的更高效舱污;

????4. Dart 支持頂級方法 (例如?main())呀舔,同時還支持在類中定義函數(shù)(靜態(tài)函數(shù)和實例函數(shù)) 你還可以在方法中定義方法 (嵌套方法或者局部方法);

????5. 同樣扩灯,Dart 還支持頂級變量媚赖,以及 在類中定義變量(靜態(tài)變量和實例變量)。 實例變量有時候被稱之為?(Fields)或者屬性(Properties)珠插;

????6. 和 Java 不同的是省古,Dart 沒有?public、?protected丧失、 和?private?關(guān)鍵字豺妓。如果一個標(biāo)識符以 _開頭,則該標(biāo)識符 在庫內(nèi)是?私有?的布讹;

? ??7.?標(biāo)識符?可以以字母或者 _ 下劃線開頭琳拭,后面可以是 其他字符和數(shù)字的組合;

????8. 有時候?表達(dá)式?expression??語句?statement?是有區(qū)別的描验,所以這種情況我們會分別指明每種情況白嘁;

????9. Dart 工具可以指出兩種問題:警告和錯誤。 警告只是說你的代碼可能有問題膘流, 但是并不會阻止你的代碼執(zhí)行絮缅。 錯誤可以是編譯時錯誤也可以是運(yùn)行時錯誤。遇到編譯時錯誤時呼股,代碼將 無法執(zhí)行耕魄;運(yùn)行時錯誤將會在運(yùn)行代碼的時候?qū)е乱粋€異常。

? ? 另外:

? ??????main 方法是固定寫法彭谁,他是程序的入口吸奴。 JS 中沒有預(yù)定的入口函數(shù),但是在 Dart 中, 每個?程序都?必須?有一個頂級的 main() 函數(shù)作為應(yīng)用程序的入口點(diǎn)则奥。

main

變量

? ? 使用 var 聲明變量考润, 可賦予不同類型的值;

? ??變量未初始化時读处,默認(rèn)值為 null糊治;

? ??如果你以后?不打算修改一個變量,使用?final?或者?const罚舱。?一個 final 變量只能賦值一次井辜;一個 const 變量是編譯時常量(const 變量同時也是 final 變量)。 頂級的 final 變量或者類中的 final 變量在 第一次使用的時候初始化馆匿。

????使用 final 聲明一個只能?賦值一次?的變量;

? ? var name = 'lily';? ?// 創(chuàng)建一個變量并初始化

? ? Object name0 = 'lilei'; //?一個對象的引用不局限于單一的類型燥滑,可以將其指定為?Object(或?dynamic)類型渐北。

? ? String name1 = 'lucy'; // 指定類型? ?

? ??final name = 'Bob';

? ??name = 'Alice'; // Error: a final variable can only be set once.

? ? // dynamic 聲明動態(tài)類型? ?

? ?dynamic a = 20;? ?

? ?a = ' sssss'


常量

? ? 使用 const 聲明常量;

? ? 使用 const 聲明的必須是?編譯期常量铭拧, 常量不能修改赃蛛, 跟 js 一樣;


數(shù)據(jù)類型

? ? Dart 的內(nèi)置數(shù)據(jù)類型

? ??????Numbers?(int,?double)

????????Strings?(String)

????????Booleans?(bool)

????????Lists?(也被稱為?arrays)

????????Sets?(Set)

????????Maps?(Map)

????????Runes?(常用于在?Characters?API 中進(jìn)行字符替換)

????????Symbols?(Symbol)

????????The value?null?(Null)


數(shù)值類型

? ??關(guān)鍵字 num 分為:整型 int? ?搀菩、浮點(diǎn)型 double

? ? 有具體類型呕臂,就可以不用 var 聲明,使用具體的類型

數(shù)值類型

數(shù)值型操作

? ??運(yùn)算符 : +肪跋、-歧蒋、*、/州既、~/ (這兩個貨在一起叫取整)谜洽、%( 取余)

? ? 常用屬性: isNAN,isEven, isOdd等(返回布爾值)

? ? 常用方法:abs()吴叶、round()阐虚、floor(), ceil()、toInt()蚌卤、toDouble()? 看文檔

數(shù)值型操作

字符串

? ? 關(guān)鍵字 String

? ? ????使用?單引號?或者 雙引號?創(chuàng)建字符串

? ? ????使用三個 引號 或者 雙引號 創(chuàng)建多行字符串(跟python不一樣实束、python是注釋)

多行字符串 保留中間的空格

? ? 使用 r 創(chuàng)建原始 raw字符串

? ? ?????加上 r? 打印的時候就會把 \n 打印出來, 不會進(jìn)行它具體含義的表達(dá)(即不會被做任何處理(比如轉(zhuǎn)義)的字符串)逊彭;

? ? 字符串操作

? ? ????運(yùn)算符 : +? 咸灿、 * 、==侮叮、 [ ]

? ? ????str [下標(biāo) ]

? ??????在字符串中析显,請以?${?表達(dá)式?}? 的形式使用表達(dá)式,如果表達(dá)式是一個標(biāo)識符,可以省略掉 {}

? ? ????插值表達(dá)式: ${ expression }

插值表達(dá)式

? ? 常用屬性: length 谷异, isEmpty

? ? 常用方法: contains(), subString(), startsWith(), endsWith(), indexOf(), lastIndexOf()

? ? toLowerCase(), toUpperCase(), trim(), trimLeft(), trimRight(), split(), replace() 太多了分尸,自己查 api


?布爾型

? ??當(dāng) Dart 需要一個布爾值的時候,只有?true?對象才被認(rèn)為是 true歹嘹,?所有其他的值都是 flase箩绍。這點(diǎn)和 JavaScript 不一樣, 像?1尺上、?"aString"材蛛、 以及?someObject?等值都被認(rèn)為是 false。

? ? 關(guān)鍵字 bool

? ? bool a = true;? ?bool b = false怎抛;

????Dart 的類型安全?不允許?你使用類似?if (nonbooleanValue)?或者?assert (nonbooleanValue)?這樣的代碼檢查布爾值卑吭。相反,你應(yīng)該總是?顯示地檢查布爾值马绝,比如像下面的代碼這樣:

顯示地檢查布爾值

列表List (數(shù)組)

? ???創(chuàng)建方式:

? ? ? ? 1 var list = [1,2,3]豆赏;

????????2 創(chuàng)建?不可變 list?:var list = const [1,2,3];

? ? ? ? 3 構(gòu)造創(chuàng)建: var list = new List()富稻;

????????Dart 在 2.3 引入了?擴(kuò)展操作符(...)和?空感知擴(kuò)展操作符(...?)

擴(kuò)展操作符

? ??????如果擴(kuò)展操作符?右邊?可能為 null 掷邦,你可以使用 null-aware 擴(kuò)展操作符(...?)來避免產(chǎn)生異常:

?空感知擴(kuò)展操作符

? ??????Dart 還同時引入了?集合中的 if?和?集合中的 for?操作,在構(gòu)建集合時椭赋,可以使用條件判斷 (if) 和循環(huán) (for)抚岗;

集合中的 if?和?集合中的 for?

????????常用操作

? ? ? ? ? length ,? add(), insert(下標(biāo)要插入的內(nèi)容), remove(要移出的內(nèi)容), clear(), 返回下標(biāo)indexOf(要查找的內(nèi)容), lastIndexOf(), sort(),sublist(), shuffle(),asMap(), forEach()

? ? ? ? list.asMap() 將 list 轉(zhuǎn)換為 map哪怔,key 就是下標(biāo)


Map

? ??Map 是用來關(guān)聯(lián) keys 和 values 的對象宣蔚。其中鍵和值都可以是任何類型的對象,每個?鍵?只能出現(xiàn)一次但是?值?可以重復(fù)出現(xiàn)多次(基本和 JS 的操作相同)认境;

? ??創(chuàng)建方式:

? ? 1. var map = { key: value, key: value }

????2. 創(chuàng)建?不可變Map

? ???????var map = const? { key: value, key: value }

????3. 構(gòu)造創(chuàng)建: var map?= new?Map()

? ??檢索的 Key 不存在于 Map 中則會返回一個 null件已;

?編譯時常量

? ? 常用操作

? ? ? ? length, isEmpty(), isNotEmpty(), keys, values, containsKey(), containsValue(),remove(),

forEach()

? ? print(map.keys) 打印所有的 key

? ??Map 可以像 List 一樣支持使用擴(kuò)展操作符(...?和?...?)以及集合的 if 和 for 操作。


Set

? ??在 Dart 中元暴,set 是一組特定元素的無序集合篷扩。 Dart 支持的集合由集合的字面量( Set?字面量literals?是在 Dart 2.2 中才加入的 ) 和 Set?類?提供;

? ??Set 還是 map?? Map 字面量語法相似于 Set 字面量語法茉盏。因為先有的 Map 字面量語法鉴未,所以?{}?默認(rèn)是?Map?類型。如果忘記在?{}?上注釋類型或賦值到一個未聲明類型的變量上鸠姨,那么 Dart 會創(chuàng)建一個類型為?Map<dynamic, dynamic>?的對象铜秆。

? ??從 Dart 2.3 開始,Set 可以像 List 一樣支持使用擴(kuò)展操作符(...?和?...?)以及 Collection?if?和?for?操作讶迁。

? ? 添加元素 add 连茧、addAll

? ? 獲取元素的數(shù)量??.length?

set 常用操作

????Set 變量前添加 const 關(guān)鍵字創(chuàng)建一個 Set 編譯時常量:

?編譯時常量

函數(shù)

? ??函數(shù)?也是對象,并且有具體類型 Function

? ??方法定義

? ? ? ? 返回類型 方法名( 參數(shù)1,參數(shù)2啸驯,.......) {

? ? ? ? ? ? ? ? // 函數(shù)體.....?

? ? ? ? ? ? ? ? return 返回值客扎;

? ? ? ?}

? ???? 返回值類型、參數(shù)類型都可省略罚斗;

? ??????方法都有返回值徙鱼,如果沒有指定,默認(rèn) return null

? ? 箭頭函數(shù)

? ??????語法?=>?表達(dá)式?是?{ return?表達(dá)式针姿;}?的簡寫

??箭頭函數(shù)

? ? 可選參數(shù)

? ??????函數(shù)可以有兩種形式的參數(shù):必要參數(shù)?和?可選參數(shù)袱吆;

? ??????必要參數(shù)?定義在?參數(shù)列表前面可選參數(shù)?則定義在?必要參數(shù)后面距淫;

? ? ? ? 可選參數(shù)的兩種形式?命名的?或?位置的绞绒;

? ??????????命名參數(shù)

? ??????????????使用 { }?將一系列參數(shù)包裹起來作為 命名參數(shù):

? ??????????????命名參數(shù)默認(rèn)為可選參數(shù),當(dāng)你調(diào)用函數(shù)時榕暇,可以使用?參數(shù)名:?參數(shù)值?的形式來指定命名參數(shù)蓬衡;

?命名參數(shù)

? ?????????位置參數(shù)

? ??????????????使用?[ ]?將一系列參數(shù)包裹起來作為位置參數(shù),?

????????????????當(dāng)你調(diào)用函數(shù)時拐揭,就不用key, value 形式了撤蟆,但是?一定要按順序?來奕塑,不能像上述?命名參數(shù) 那樣 位置隨便堂污;

?位置參數(shù)

? ? 默認(rèn)參數(shù)

? ??????使用 = 在可選參數(shù)指定默認(rèn)值, 默認(rèn)值只能是編譯期常量龄砰,沒有指定默認(rèn)值的情況下默認(rèn)值為?null盟猖,跟JS一樣;

默認(rèn)參數(shù)

? ? 匿名函數(shù)

? ??????可以創(chuàng)建一個沒有名字的方法换棚,稱之為?匿名函數(shù)式镐、?Lambda 表達(dá)式?或?Closure 閉包;

? ??????????([ [類型]?參數(shù)[, …] ]) {

? ? ? ? ? ? ? //函數(shù)體;

????????????};

匿名函數(shù)
箭頭函數(shù)的形式

? ?詞法作用域

? ??????Dart 是詞法有作用域語言固蚤,變量的作用域在寫代碼的時候就確定了娘汞,大括號內(nèi)定義的變量只能在大括號內(nèi)訪問,與 Java 類似夕玩;

? ? ? ? 函數(shù)內(nèi)部能訪問到包括頂層變量在內(nèi)的所有的變量你弦, 同 JS 一樣;

? ?閉包

? ??????閉包?即一個函數(shù)對象燎孟,即使函數(shù)對象的調(diào)用在它原始作用域之外禽作,依然能夠訪問在它詞法作用域內(nèi)的變量。

? ??????函數(shù)可以封閉定義到它作用域內(nèi)的變量揩页。

??閉包

返回值

????所有的函數(shù)都有返回值旷偿。沒有顯示返回語句的函數(shù)最后一行默認(rèn)為執(zhí)行?return null;。

main() 函數(shù)

? ??每個 Dart 程序都?必須?有一個?main()?頂級函數(shù)作為程序的入口,?main()?函數(shù)返回值為?void?并且有一個?List<String>?類型的可選參數(shù)萍程。

main() 函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幢妄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尘喝,更是在濱河造成了極大的恐慌磁浇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朽褪,死亡現(xiàn)場離奇詭異置吓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缔赠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門衍锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗤堰,你說我怎么就攤上這事戴质。” “怎么了踢匣?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵告匠,是天一觀的道長。 經(jīng)常有香客問我离唬,道長后专,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任输莺,我火速辦了婚禮戚哎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫂用。我一直安慰自己型凳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布嘱函。 她就那樣靜靜地躺著甘畅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪往弓。 梳的紋絲不亂的頭發(fā)上绳泉,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天供璧,我揣著相機(jī)與錄音唯袄,去河邊找鬼拷姿。 笑死,一個胖子當(dāng)著我的面吹牛缴淋,可吹牛的內(nèi)容都是我干的准给。 我是一名探鬼主播泄朴,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼露氮!你這毒婦竟也來了祖灰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畔规,失蹤者是張志新(化名)和其女友劉穎局扶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叁扫,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡三妈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莫绣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畴蒲。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖对室,靈堂內(nèi)的尸體忽然破棺而出模燥,到底是詐尸還是另有隱情,我是刑警寧澤掩宜,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布蔫骂,位于F島的核電站,受9級特大地震影響牺汤,放射性物質(zhì)發(fā)生泄漏辽旋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一慧瘤、第九天 我趴在偏房一處隱蔽的房頂上張望戴已。 院中可真熱鬧固该,春花似錦锅减、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桦沉,卻和暖如春每瞒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纯露。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工剿骨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埠褪。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓浓利,卻偏偏與公主長得像挤庇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贷掖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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