Dart 比 JavaScript 更酷的10個理由

Dart 是 Google發明的一種新的編程語言。在使用JavaScript一年多之後,我對Dart可謂是一見傾心。我之前是作Java的,我在用JS的時候要學習不少新東西。javascript

有人說你必須深刻研究JavaScript,不然你沒有資格評論它。我不是JS高手,可是我堅信一門編程語言應該易於學習,易於理解,而且語言結構要合理。雖然我也長時間和JS打交道,雖然我也知道JS有不少酷的功能,可是我仍是天天得當心翼翼的處理JS的問題。這就很很差,編程語言應該對程序員友好,而不是程序員去伺候一門語言。html

下面我將列出Dart比JavaScript強的地方,也是吸引我轉移到Dart的緣由。java

  1. Dart只有一種否認條件
    在JS中,你能夠用 false, null, undefined,"",0,NaN 做爲否認條件,例如:
    1
    var a = null;
    2
    if(!a) {
    3
    // do
    4
    }
    在Dart中,只有 false 纔是否認條件,上面的代碼必須寫成這樣:
    1
    var a = null;
    2
    if(a != null) {
    3
    // do
    4
    }

雖然多種否認條件也沒有問題,可是明顯程序變的複雜和難以閱讀,並且你須要學習各類否認條件。程序員

  1. Dart可使用類型
    JS開發者每每強調,類型會下降靈活性。OK,也許是對的。可是過多的靈活性會讓你的軟件崩潰。有時候,你須要用到類型,在Dart中,這就能夠實現,你能夠啓用類型檢查。web

  2. JS須要一個框架來解析DOM
    看看JS的這些方法吧:
    01
    getElementsById()
    02
    getElementsByTagName()
    03
    getElementsByName()
    04
    getElementsByClassName()
    05
    querySelector()
    06
    querySelectorAll()
    07
    document.links
    08
    document.images
    09
    document.forms
    10
    document.scripts
    11
    formElement.elements
    12
    selectElement.options
    強大嗎?可是咱們有JQuery,Dart學習了JQuery,只有兩個方法:
    1
    elem.query('#foo');
    2
    elem.queryAll('.foo');編程

  3. 類和接口
    當Java開發者剛開始寫JS的時候,他們老是把JS寫的跟Java同樣。他們會寫類和構造函數,很顯然,JS不是這麼玩的。在JS中,任何東西都是對象,這看起來很酷,可是那些設計模式就沒有用了。取而代之的是JavaScript的設計模式。但這給開發者形成了不少困惑,也讓代碼一團糟。設計模式

  4. 繼承
    用JavaScript有不少方式實現繼承,例如 Dr. Rauschmayer 博客(http://www.2ality.com/2011/11/javascript-classes.html)中講的那樣。或者你也能夠用Prototype和jQuery框架,或者你也能夠本身實現一套繼承的機制。這樣就很混亂,爲了實現繼承這個目標,JS有不少不一樣的作法,讓人頭疼。數組

Dart有類這個概念,因此也就有「extends」這個關鍵詞。一切都很簡單!服務器

  1. 全局名字空間
    在JS中,若是你有什麼變量在全局級別的話,全部的腳本均可以訪問這個變量,這就很恐怖,代碼會變的很混亂感。後來我學習了Stoyan Stefanovs Book JavaScript Patterns (http://astore.amazon.de/neoteccde-21/detail/0596806752),個人命名空間今後變的很乾淨。可是爲何這種基本的功能語言不能自帶,而須要經過所謂的模式來解決這個問題呢?

Dart默認是「library」範圍,只有聲明爲 public 的東西才能被外部訪問。這樣就很簡單,不一樣的腳本不會相互影響。框架

  1. Dart支持並行
    JS是沒有真正的並行的。即便你經過jQuery發出一個異步請求,你也只有一個線程在工做。你能夠經過HTML5,webworkers來解決這個問題。

Dart支持並行,支持Isolates,這有點像Erlang。當一個Isolate失敗的時候,另一個Isolate能夠重啓這個Isolate。這是否是很酷?這讓Dart適合服務器端編程。是的,我知道Node.js,可是Dart天生支持這個功能。

  1. JS 不支持 foreach
    在JS中,你這樣遍歷數組:
    1
    for (var i = 0; i < elements.length; i++) {
    2
    // do something
    3
    }
    或者你能夠這樣來遍歷對象:
    1
    for (key in elements) {
    2
    alert(elements[key]);
    3
    }
    但這種方式是不推薦的。由於這種遍歷方式獲得的結果是不肯定的,你也有可能拿到方法名字等你不想要的東西。固然,jQuery是你的救星!

使用Dart:
1
for (element in elements) {
2
// do something
3
}
沒有比這更簡單了吧。

  1. 奇怪的數組初始化
    看看這段代碼:
    1
    var a1 = new Array(1,2,3,4,5);
    2
    var a2 = new Array(5);
    a1 是有五個元素的數組 [1,2,3,4,5]
    a2 是有五個元素的數組 [undefined,undefined,undefined,undefined,undefined]

Dart就很清晰:
1
List a1 = [1,2,3,4,5];
2
List a2 = new List(5);
10. undefined 和 null
在JS中,這兩個值大多數狀況能夠互換,但有時候又不是,讓人很頭疼。Dart只有null。

總結
JS有不少優勢,有一些不錯的模式。可是到目前爲止,我尚未發現什麼JS能作而Dart不能作的。Dart明顯更優雅,更易於閱讀(對我而言)。也許有一些JS狂人以爲JS好,能夠理解。

http://www.grobmeier.de/10-reasons-why-dart-is-cooler-than-javascript-03012012.html

相關文章
相關標籤/搜索