1.【文檔講解】Dart基礎(chǔ)快速入門

3-2 【文檔講解】Dart基礎(chǔ)快速入門

image

聲明:Flutter專欄文檔均來自慕課網(wǎng)
https://coding.imooc.com/class/321.html

Dart基礎(chǔ)知識(shí)

  • 程序入口

  • 控制臺(tái)輸出

  • 變量

  • 檢查null或零

  • Functions

  • 異步編程

    • Futures

    • async 和 await

在本節(jié)中我們主要對標(biāo)JavaScript來講解Dart與JavaScript的異同粉洼,對JavaScript還不熟悉的小伙伴可以省略JavaScript部分,直接學(xué)習(xí)Flutter部分叶摄。

程序入口

JavaScript沒有預(yù)定義的入口函數(shù)属韧,但在Dart中,每個(gè)app都必須有一個(gè)頂級(jí)的main()函數(shù)作為應(yīng)用程序的入口點(diǎn)蛤吓。


// Dart

main() {

}

練一練DartPad宵喂。

DartPadDart的一個(gè)線上playground,提供Dart線上playground還有:Online Dart Compiler柱衔。

控制臺(tái)輸出

要在Dart中打印到控制臺(tái)樊破,可使用print


// JavaScript

console.log("Hello world!");

// Dart

print('Hello world!');

練一練DartPad

變量

Dart是類型安全的** - 它使用靜態(tài)類型檢查和運(yùn)行時(shí)的組合,檢查以確保變量的值始終與變量的靜態(tài)值匹配 類型唆铐。盡管類型是必需的哲戚,但某些類型注釋是可選的,因?yàn)?/strong> Dart**會(huì)執(zhí)行類型推斷艾岂。

創(chuàng)建和分配變量

在JavaScript中顺少,無法定義變量類型。

在Dart中, 變量必須是明確的類型或系統(tǒng)能夠解析的類型王浴。


// JavaScript

var name = "JavaScript";

// Dart

String name = 'dart'; // Explicitly typed as a string.

var otherName = 'Dart'; // Inferred string.

// Both are acceptable in Dart.

練一練DartPad脆炎。

有關(guān)更多信息,可參考Dart's Type System

默認(rèn)值

在JavaScript中氓辣,未初始化的變量是undefined秒裕。

在Dart中,未初始化的變量的初始值為null钞啸。

注意:數(shù)字在Dart中也被當(dāng)成對象几蜻,所以只要是帶有數(shù)字類型的未初始化變量的值都是“null”喇潘。


// JavaScript

var name; // == undefined

// Dart

var name; // == null

int x; // == null

嘗試一下DartPad

有關(guān)更多信息,** 可參考Dart**官網(wǎng)關(guān)于變量的介紹梭稚。

檢查null或零

在JavaScript中颖低,1或任何非null對象的值被視為true。


// JavaScript

var myNull = null;

if (!myNull) {

  console.log("null is treated as false");

}

var zero = 0;

if (!zero) {

  console.log("0 is treated as false");

}

Dart中弧烤,只有布爾值“true”被視為true忱屑。


// Dart

var myNull = null;

if (myNull == null) {

  print('use "== null" to check null');

}

var zero = 0;

if (zero == 0) {

  print('use "== 0" to check zero');

}

練一練DartPad

前方高能

Dart null檢查最佳實(shí)踐

Dart 1.12開始暇昂,null-aware運(yùn)算符可用幫助我們做null檢查:


bool isConnected(a, b) {

  bool outConn = outgoing[a]?.contains(b) ?? false;

  bool inConn = incoming[a]?.contains(b) ?? false;

  return outConn || inConn;

}

?.運(yùn)算符在左邊為null的情況下會(huì)阻斷右邊的調(diào)用莺戒,?? 運(yùn)算符主要作用是在左側(cè)表達(dá)式為 null 時(shí)為其設(shè)置默認(rèn)值。

對于表達(dá)式:

outgoing[a]?.contains(b)

如果outgoing為null或outgoing[a]為null或contains(b)的值為null话浇,都會(huì)導(dǎo)致表達(dá)式為null脏毯。

大家看一下下面預(yù)計(jì)的執(zhí)行結(jié)果:


print(null ?? false);

print(false ?? 11);

print(true ?? false);

練一練

技巧:獲取一個(gè)對象中數(shù)組的長度:searchModel?.data?.length ?? 0

Functions

Dart和JavaScript函數(shù)類似幔崖。主要區(qū)別是聲明:


// JavaScript ES5

function fn() {

  return true;

}

// Dart

fn() {

  return true;

}

// can also be written as

bool fn() {

  return true;

}

練一練DartPad食店。

關(guān)于functions的更多內(nèi)容可參考dart官方文檔functions

異步編程

Futures

與JavaScript一樣赏寇,Dart支持單線程執(zhí)行吉嫩。在JavaScript中,Promise對象表示異步操作的最終完成(或失斝岫ā)及其結(jié)果值自娩,Dart使用 Future 來表示異步操作:


// JavaScript

_getIPAddress = () => {

  const url="https://httpbin.org/ip";

  return fetch(url)

    .then(response => response.json())

    .then(responseJson => {

      console.log(responseJson.origin);

    })

    .catch(error => {

      console.error(error);

    });

};

// Dart

_getIPAddress() {

  final url = 'https://httpbin.org/ip';

  HttpRequest.request(url).then((value) {

      print(json.decode(value.responseText)['origin']);

  }).catchError((error) => print(error));

}

練一練:DartPad

關(guān)于Futures的更多內(nèi)容可參考dart官方文檔Futures渠退。

async await

async函數(shù)聲明定義了一個(gè)異步函數(shù)忙迁。

在JavaScript中,async函數(shù)返回一個(gè)Promise碎乃。await運(yùn)算符是用來等待Promise:


// JavaScript

async _getIPAddress() {

  const url="https://httpbin.org/ip";

  const response = await fetch(url);

  const json = await response.json();

  const data = await json.origin;

  console.log(data);

}

在Dart中姊扔,async函數(shù)返回一個(gè)Future,函數(shù)的主體是稍后執(zhí)行梅誓。await 運(yùn)算符用于等待Future:


// Dart

_getIPAddress() async {

  final url = 'https://httpbin.org/ip';

  var request = await HttpRequest.request(url);

  String ip = json.decode(request.responseText)['origin'];

  print(ip);

}

練一練DartPad恰梢。

關(guān)于Futures的更多內(nèi)容可參考dart官方文檔async and await

關(guān)于創(chuàng)建Dart的更多實(shí)戰(zhàn)技巧與最佳實(shí)踐可學(xué)習(xí)《基于Flutter1.x開發(fā)攜程網(wǎng)App梗掰。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嵌言,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子及穗,更是在濱河造成了極大的恐慌摧茴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埂陆,死亡現(xiàn)場離奇詭異蓬蝶,居然都是意外死亡尘分,警方通過查閱死者的電腦和手機(jī)猜惋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門丸氛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人著摔,你說我怎么就攤上這事缓窜。” “怎么了谍咆?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵禾锤,是天一觀的道長。 經(jīng)常有香客問我摹察,道長恩掷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任供嚎,我火速辦了婚禮黄娘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘克滴。我一直安慰自己逼争,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布劝赔。 她就那樣靜靜地躺著誓焦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪着帽。 梳的紋絲不亂的頭發(fā)上杂伟,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音仍翰,去河邊找鬼赫粥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歉备,可吹牛的內(nèi)容都是我干的傅是。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蕾羊,長吁一口氣:“原來是場噩夢啊……” “哼喧笔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起龟再,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤书闸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后利凑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浆劲,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫌术,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牌借。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片度气。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖膨报,靈堂內(nèi)的尸體忽然破棺而出磷籍,到底是詐尸還是另有隱情,我是刑警寧澤现柠,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布院领,位于F島的核電站抽米,受9級(jí)特大地震影響裙品,放射性物質(zhì)發(fā)生泄漏河咽。R本人自食惡果不足惜幽七,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一嗤疯、第九天 我趴在偏房一處隱蔽的房頂上張望测蘑。 院中可真熱鬧份帐,春花似錦或杠、人聲如沸鱼鼓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迄本。三九已至硕淑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘉赎,已是汗流浹背置媳。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留公条,地道東北人拇囊。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像靶橱,于是被迫代替她去往敵國和親寥袭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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