dart學(xué)習(xí)(和js java比較)

dart學(xué)習(xí)(和js比較):

參考文獻:https://www.w3cschool.cn/nxvsy/nxvsy-58fq35q6.html

在線dart環(huán)境: https://dartpad.cn/

聲明變量:

多了一個 final 和const幾乎一樣克懊。只是 const 要求不能不給初值铝穷,而final是可以不給初值的,沒給初值的final可以進行賦值嚎朽,賦值了之后就無法再改變。

沒有l(wèi)et鲤拿,var 替代了let蚂四。 但是一旦給變量賦值后 它的類型就是確定的了,不能再改變跨琳。


var ce = 1;
ce = 'ssss';
//   ↑ 這里報錯: A value of type 'String' can't be assigned to a variable of type 'int'.

多了 一種 dynamic 動態(tài)的自点,如果是dynamic的就能 賦值成一種類型后 再改變。


dynamic ce = 1;
ce = 'ssss';
// 沒毛病

類型

1脉让、多了一種 Rune類型(表示Unicode字符)

2桂敛、Map Set多了幾種表示的方式。

Set:


var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

// 形同:
var halogens1 = Set<String>();
halogens1.add('fluorine')

// 形同:
var halogens2 = <String>{};
halogens2.add('ssss');

Map:


var nMap = {};
// 形同:
var nMap1 = new Map<dynamic,dynamic>();

// 假如
var mMap = { 1:'test' };
// 形同:
var mMap1 = Map<Number, String>();

值得注意的是溅潜,dart中沒有js里隱式的類型轉(zhuǎn)換埠啃,所以只有bool類型能作為是否判斷

函數(shù):

1、命名參數(shù):聲明函數(shù)的時候給參數(shù)加上大括號(類似于react組件參數(shù)的寫法)伟恶。在調(diào)用該函數(shù)時碴开,可以用 參數(shù)名稱:變量 的方式去指定參數(shù)。

(這樣就避免了要記第幾個參數(shù)是啥博秫,只要記得名字就好潦牛,更方便閱讀。當然這樣是不是也就意味著沒有像js函數(shù)參數(shù)上的解構(gòu)呢挡育?)

如果函數(shù)使用了命名參數(shù)巴碗,調(diào)用時必須加上參數(shù)名稱。


String add({String ce, String le} ){
  return ce + le;
}

void main() {
  // 輸出: bs
  print(add(le:'s',ce:'b'));
}

2即寒、可選參數(shù): 如果把參數(shù)用[]中括號括起來 就能設(shè)為可選的參數(shù)橡淆。

沒法和命名參數(shù)合用

3、參數(shù)默認值和js一樣用 = 設(shè)置

4母赵、函數(shù)不再用 function 聲明逸爵,而是用返回值類型 來替代function的位置(和java一樣)

5、匿名函數(shù):和js一樣可以用箭頭函數(shù)凹嘲,同時甚至更進一步——箭頭都省略师倔。


var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
  print('${list.indexOf(item)}: $item');
});

list.forEach((item) => print('${list.indexOf(item)}: $item'));

6、函數(shù)內(nèi)是可以再聲明函數(shù)的周蹭,這點和js相同和java不同疲恢。

7、有閉包的概念瓷胧。


/// 返回一個函數(shù)显拳,返回的函數(shù)參數(shù)與 [addBy] 相加。
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

void main() {
  // 創(chuàng)建一個加 2 的函數(shù)搓萧。
  var add2 = makeAdder(2);

  // 創(chuàng)建一個加 4 的函數(shù)萎攒。
  var add4 = makeAdder(4);

  assert(add2(3) == 5);
  assert(add4(3) == 7);
}

8、函數(shù)返回值矛绘,js默認返回undefined耍休,而dart默認返回null。

運算符

1货矮、 ~/ 除以并取整羊精。


print(10 ~/ 2 ); // 5
print(11 ~/ 2 ); // 5
print(12 ~/ 2 ); // 6

2、只有== 沒有===

3囚玫、as is is!

用于類型判斷 is is! 類似于js typeof喧锦。(只是類似)

而 as 則類似于一個語法糖:如果 is 則做什么:


if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}
// 形同:
(emp as Person).firstName = 'Bob';

4、-= += /= %= js中也有或者即將出現(xiàn)在ES標準中的運算

5抓督、三元運算符 燃少? : 和js中一樣。

6铃在、?? 用于表示 如果前面的為null 則給出后面的


String playerName(String name) => name ?? 'Guest';
// 形同
String playerName(String name) => name != null ? name : 'Guest';
// 形同
String playerName(String name) {
  if (name != null) {
    return name;
  } else {
    return 'Guest';
  }
}

7阵具、級聯(lián)運算符 (..) 表示往上追溯到第一級 語句返回的對象。


querySelector('#confirm') // 獲取對象定铜。
  ..text = 'Confirm' // 調(diào)用成員變量阳液。
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

// 形同

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

8、?. 和js一樣

控制語句

1揣炕、assert方法: 只在測試環(huán)境有效的斷言帘皿,如果第一個參數(shù)為false,那么會打印第二個參數(shù)(String)畸陡,并終止程序鹰溜,如果第一個參數(shù)為true,啥都不發(fā)生丁恭。

異常

1曹动、catch語句前可以用on XXX catch(e){} 來捕獲特定類型的錯誤。


try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // 一個特殊的異常
  buyMoreLlamas();
} on Exception catch (e) {
  // 其他任何異常
  print('Unknown exception: $e');
} catch (e) {
  // 沒有指定的類型涩惑,處理所有異常
  print('Something really unknown: $e');
}

1仁期、new 關(guān)鍵詞變成可選

2、注意空安全問題竭恬。 存在late關(guān)鍵字 表示延遲初始化跛蛋。

3、對象的runtimeType 可以在運行時獲取對象的類型

4痊硕、同樣存在super關(guān)鍵字赊级,但是使用上有所不同

5、私有屬性用下劃線表示岔绸,只能在同一文件(庫)中訪問 -- 和java prorect保護類型 類似但又不完全類似

6理逊、構(gòu)造參數(shù)后 會有一個初始化列表的位置來初始化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盒揉,隨后出現(xiàn)的幾起案子晋被,更是在濱河造成了極大的恐慌,老刑警劉巖刚盈,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡洛,死亡現(xiàn)場離奇詭異,居然都是意外死亡藕漱,警方通過查閱死者的電腦和手機欲侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肋联,“玉大人威蕉,你說我怎么就攤上這事¢先裕” “怎么了韧涨?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侮繁。 經(jīng)常有香客問我氓奈,道長,這世上最難降的妖魔是什么鼎天? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任舀奶,我火速辦了婚禮,結(jié)果婚禮上斋射,老公的妹妹穿的比我還像新娘育勺。我一直安慰自己,他們只是感情好罗岖,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布涧至。 她就那樣靜靜地躺著,像睡著了一般桑包。 火紅的嫁衣襯著肌膚如雪南蓬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音赘方,去河邊找鬼烧颖。 笑死,一個胖子當著我的面吹牛窄陡,可吹牛的內(nèi)容都是我干的炕淮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼跳夭,長吁一口氣:“原來是場噩夢啊……” “哼涂圆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起币叹,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤润歉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颈抚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩衩,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年邪意,在試婚紗的時候發(fā)現(xiàn)自己被綠了九妈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡雾鬼,死狀恐怖萌朱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情策菜,我是刑警寧澤晶疼,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站又憨,受9級特大地震影響翠霍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蠢莺,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一寒匙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躏将,春花似錦锄弱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚯窥,卻和暖如春掸鹅,著一層夾襖步出監(jiān)牢的瞬間塞帐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工巍沙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葵姥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓赎瞎,卻偏偏與公主長得像牌里,于是被迫代替她去往敵國和親颊咬。 傳聞我的和親對象是個殘疾皇子务甥,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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

  • 這篇文章將會向你展示如何使用Dart的每一個知識點,包括變量喳篇,操作符敞临,類,類庫麸澜,但這是在你已經(jīng)有一個其他語言的編碼...
    LineCutFeng閱讀 844評論 0 2
  • 閱讀 language-tour[https://dart.dev/guides/language/languag...
    aJIEw閱讀 453評論 0 1
  • 目錄 參考資料 語言特性 關(guān)鍵字 變量與常量 數(shù)據(jù)類型 運算符 operators 控制流程語句 異常 Excep...
    GuoDongW閱讀 185,122評論 22 341
  • 一. Dart入口方法 每一個flutter項目的lib目錄里面都有一個main.dart挺尿。這個文件就是flutt...
    騎馬縱天下閱讀 2,530評論 0 1
  • 任何保存在變量中的都是一個對象, 并且所有的對象都是對應(yīng)一個類的實例炊邦, 無論是數(shù)字编矾,函數(shù)和 null 都是對象,所...
    虛擬J閱讀 330評論 0 0