程序入口
JavaScript沒(méi)有預(yù)定義的入口函數(shù)闻妓,但在Dart中由缆,每個(gè)app都必須有一個(gè)頂級(jí)的main ()函數(shù)作為應(yīng)用程序的入口點(diǎn)(這個(gè)跟java很類似)是晨。
//Dart
main() {}
控制臺(tái)輸出
要在Dart中打印到控制臺(tái)署鸡,可使用print :
// JavaScript
console.log("Hello world!");
//Dart
print('Hello world!');
變量
Dart是類型安全的 - 它使用靜態(tài)類型檢查和運(yùn)時(shí)的組合,檢查以確保變量的值始終與變量的靜態(tài)值匹配類型炉抒。 盡管類型是必需的拿诸,但某些類型注釋是可選的亩码,因?yàn)镈art會(huì)執(zhí)行類型推斷。
// JavaScript
var name = "DavaScript";
//Dart
String name = 'dart'; // Explicitly typed as a string,
var otherName = 'Dart'; // Inferred string.
在JavaScript中吏廉,未初始化的變量是undefined;在Dart中,未初始化的變畺的初始值為null佩伤。
注意:數(shù)宇在Dart中也被當(dāng)成對(duì)象,所以只要是帶有數(shù)宇類型的末初始化變畺的值都是“null”障斋。
// JavaScript
van name; // == undefined
// Dart
van name; // == null
檢查null或零
在JavaScript中邀层,1或任何非null對(duì)象的值被視為true
// JavaScript
van myNull = null;
if (SmyNull) {
console.log{"null is treated as false.’) 劲赠;
}
van zero = 0;
if (!zeno) {
console.log(M0 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');
Dart null檢查最佳實(shí)踐
從Dart 1.12開(kāi)始讯赏,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)值。
對(duì)于表達(dá)式:
outgoing[a]?.contains(b)
可以計(jì)算下面結(jié)果
print(null ?? false);
print(false ?? 11);
print(true ?? false);
Functions
// JavaScript ES6
function fn() {
return true;
}
//Dart
fn() {
return true;
}
// can also be written as
bool fn() {
return true;
}
異步編程
Futures
與JavaScript一樣,Dart支持單線程執(zhí)行。在javaScript中 Promise 對(duì)象表示異步操作的最終完成或者失敗及其結(jié)果值抚芦。Dart使用Future表示異步操作:
// JavaScript
_getIPAddress = () =>{
const url = "https://httpbin.org/ip";
return fetch()
.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) => pront(error));
}
async和await
async 函數(shù)聲明定義了一個(gè)異步函數(shù)褥民。
在 JavaScript 中消返,async函數(shù)返回一個(gè)Promise。 await 運(yùn)算符是用來(lái)等待 Promise:
// JavaScript
_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() {
final url = "https://httpbin.org/ip";
var request = await HttpRequest.request(url);
String ip = json.decode(request.responseText)['origin'];
print(ip);
}
參考鏈接 :Dart中文網(wǎng)