Dart是什么?
Dart是一門新的編程語言,如同JAVA、PHP一樣,是為了解決編寫應(yīng)用程序中的一些實際問題而被造輪子發(fā)明出來的,而這個造輪子的人就是 Google。可能大家都熟悉Google 的另一個輪子Golang,而對Dart 聽聞甚少,其實Dart 的出生跟Go很相近,只是由于它的星途比起Go來說有點坎坷,一直沒有被廣大開發(fā)者重視,相關(guān)的技術(shù)文章和應(yīng)用比較匱乏,也就一直蒙塵在泛泛語言之中。
最初設(shè)計Dart,是Google的一幫程序員出于對JavaScript的不滿,決定自己搞一個新語言用來替換JavaScript的,所以剛開始Dart也就是用來作為瀏覽器腳本運行在瀏覽器中的。為了推廣Dart,Google利用自己的利器Chrome讓它內(nèi)置了DartVM的引擎。有了運行環(huán)境,加上用戶群的可觀數(shù)量,Dart最初也贏得了部分前端開發(fā)者的青睞。但是!!!,咳咳,這里要停頓一下,有轉(zhuǎn)折——Google的這幫程序員萬萬沒想到,看似并無大用的JavaScript居然因為NodeJS而煥發(fā)了第二春。此時移動互聯(lián)網(wǎng)處于萌芽發(fā)展中,一個叫做NodeJS的開源項目借助這股移動互聯(lián)的東風(fēng)順勢而起,很快的燒遍了前端、燒到了后端,甚至燒到了手機應(yīng)用和桌面應(yīng)用,可以說是在編程界無孔不入,幾乎成就了JS程序員口中的“凡是能被JS實現(xiàn)的,最終都要被JS實現(xiàn)”的愿景。前端的開發(fā)模式因此而改變,進入了一個新的天地。一些明星項目如React、React-Native、Vue等等如雨后春筍般迅速的崛起,一句話總結(jié)就是“Javascript很忙”。
Javascript很忙,程序員更忙,Dart就這樣被慢慢地遺忘在角落。加上一直以來缺少頂級的項目使用,就算再是親兒子,得不到JS開發(fā)者的心,Google也沒什么辦法,在2015年的時候,Google在Chrome中默默的移除了內(nèi)置的Dart引擎。但是!!!這里又是但是,我喜歡在但是這里停頓一下,可以刷存在感2333——Google并沒有放棄Dart,Google內(nèi)部用Dart編寫孵化了一個移動開發(fā)框架Sky,之后又被命名為Flutter,進入了移動跨平臺開發(fā)的領(lǐng)域。如同Javascript,Dart在服務(wù)端和瀏覽器前端也在不遺余力的發(fā)展:服務(wù)端可以編寫命令行程序,前端可以編譯成Javascript運行在瀏覽器中。Google的另一個前端大殺器Angular也有對應(yīng)的Dart版本。在Google的未來操作系統(tǒng)Fuchsia中,Dart被指定為官方的開發(fā)語言。
Dart的發(fā)展經(jīng)歷這么多,在歷史的版本迭代中,已經(jīng)不是當(dāng)初設(shè)計的僅僅作為一個腳本運行在瀏覽器中了。船小好調(diào)頭,也正是使用者較少,沒有歷史包袱,Dart的創(chuàng)造者們總結(jié)了Dart1.0版本的優(yōu)缺點,決定打造一個運行更快、更加安全的強類型語言Dart2.0(在Dart2.0之前,Dart是一門弱類型語言。變更為強類型語言(注:官網(wǎng)原文是 Dart 2.0 has a sound type system )之后,Dart依舊可以使用類型推斷等弱類型語言的特性)。Dart2.0版本目前正處于dev的狀態(tài),開發(fā)者可以使用Dart進行開發(fā)了,在不久之后就會發(fā)布正式的版本。
Dart 屬于什么級別的語言
Dart 屬于應(yīng)用層編程語言。它有自己的 DartVM ,通常情況下運行在自己的VM上,但是在特定情況下他也可以編譯成 Native Code 運行在硬件上(比如移動開發(fā)框架中,Flutter 會將代碼編譯成指定平臺的 Native Code 以提高性能)。運行 Dart 編寫的軟件,既可以以明文代碼的方式直接運行,還支持運行快照打包后的二進制,以提高啟動速度、安全性和性能。你可以將它當(dāng)做JAVA,亦可以當(dāng)做 JavaScript;它比 JAVA 簡單,易于理解,比JavaScript 更加規(guī)范,更加工程化。
Dart 的特性
- 單進程異步事件模型;
- 強類型,可以類型推斷;
- DartVM,具有極高的運行效率和優(yōu)秀的代碼運行優(yōu)化,根據(jù)早前的基準(zhǔn)測試,性能比肩 Java7 的JVM;
- 獨特的隔離區(qū)( Isolate ),可以實現(xiàn)多線程;
- 面向?qū)ο缶幊蹋磺袛?shù)據(jù)類型均派生自 Object ;
- 運算符重載,泛型支持;
- 強大的 Future 和 Streams 模型,可以簡單實現(xiàn)高效的代碼;
- 全平臺語言,可以很好的勝任移動和前后端的開發(fā)。
- 在語法上,Dart 提供了很多便捷的操作,可以明顯減少代碼量。比如字符連接,可以直接
"my name is $name, age is $age"
,無需+
號拼接,也無需做類型轉(zhuǎn)換。
使用 Dart 可以做什么
登錄 Dart 的官網(wǎng),你可以很清楚的看到 Dart 的創(chuàng)作者將 Dart 明確的分成了三個方向: 移動開發(fā)、DartVM 命令行程序(Server 端)、瀏覽器(前端)。
移動開發(fā):這是 Dart 的殺手锏,也是眾多 Dart 開發(fā)者開始接觸學(xué)習(xí) Dart 語言的原因。這個移動開發(fā)的核心是叫做 Flutter 的一個框架,它使用Dart + C++ + Skia 開發(fā),對外提供了完全不依賴系統(tǒng)平臺的 Widget 的能力,只通過自繪圖形的方式工作,因此具有極其優(yōu)秀的跨平臺性。目前已經(jīng)支持了 iOS、Android、Fuchsia。可以想象,你對應(yīng) Android 編寫的一套軟件可以不用修改一行代碼的運行在 iOS 中,甚至是未來的 Fuchsia 中(盡管不知道這個系統(tǒng)最終能不能發(fā)布出來),是不是很有要馬上去嘗試的心動?
DartVM 命令行程序:就是寫服務(wù)端的應(yīng)用。比如寫個 http 的服務(wù),對應(yīng)用提供 api ,都是及其簡單的事情。和 JavaScript 一樣,Dart 也是單進程異步事件的模型,所以它天生擅長高并發(fā),而且它還提供了隔離區(qū)(isolate)的接口,可以實現(xiàn)多線程的操作,應(yīng)對CPU密集型場景也不再話下。
瀏覽器:這個應(yīng)該是 Dart 一開始造輪子的初衷,結(jié)局嘛,大家也都是知道,還是 JS 一統(tǒng)江湖。所以我只是建議大家在前端用用看,畢竟 Angular 也有官方的團隊在支持 Dart 的版本,而且用 JS 寫簡單的應(yīng)用還好,復(fù)雜的場景下那個代碼真的是。。。。這個時候用 Dart 一定會給你一個完全不一樣的體驗。當(dāng)然,可能開發(fā)效率上Dart會遜色一些,但維護成本上 Dart 絕對碾壓 JS。(這里用“碾壓”是一種夸張的手法,望知.)
總之,Dart 可以做的很多,涉及到編程的方方面面。但是當(dāng)下我最看好的是移動開發(fā)的前景。Google 也是想鼓勵開發(fā)者使用這個Flutter 來為以后的 Fuchsia 打基礎(chǔ),做生態(tài),所以 Flutter 這塊各位可以放心大膽的用起來。對。就是現(xiàn)在!!!
為什么要用 Dart
Dart 僅僅是你工作中解決問題的一種選擇,我認為特定的場景中使用最適合的語言編程才是聰明人的做法,所以為什么要用 Dart 這取決于你。如果非要給個理由,那可能就是 Flutter 讓你愛上的原因。
學(xué)習(xí) Dart 的路線
不管你是 JavaScripter、JAVAer,還是PHPer、Pythoner,還是Goer、Ruster,都可以用極低的成本學(xué)習(xí) Dart ,并在短時間內(nèi)上手做東西。如果你是一個開發(fā)的入門者,那我建議你還是先學(xué)習(xí)一下國民語言C,無論你是不是要學(xué)習(xí) Dart,你都應(yīng)該先走學(xué)習(xí) C 的路線。
學(xué)習(xí) Dart 的路線,我只針對有編程經(jīng)驗的人來說,可以分成四步:基礎(chǔ)語言語法 ;代碼編寫風(fēng)格;基礎(chǔ)類庫的使用;開始你的編程。
我比較鼓勵開發(fā)者在學(xué)習(xí)新語言的時候盡早的上手項目去使用它。只有你在編程中反復(fù)的使用,你才會理解繼而更好的運用這個語言的優(yōu)勢。如果可能,還可以在一段時間后對代碼進行重構(gòu),更能加深對該語言的組織和整體語言的進一步理解。
Dart 入門教程
見官網(wǎng) language-tour