• Dart 比 JavaScript 更酷的10個理由

    1
    JavaScript Java HTML C/C++ Go 17354 次瀏覽
    Dart 是 Google發明的一種新的編程語言。在使用JavaScript一年多以后,我對Dart可謂是一見鐘情。我以前是做Java的,我在用JS的時候要學習很多新東西。

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

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

    1. Dart只有一種否定條件
    在JS中,你可以用 false, null, undefined,"",0,NaN 作為否定條件,例如:
    var a = null;
    if(!a) {
       // do
    }
    在Dart中,只有 false 才是否定條件,上面的代碼必須寫成這樣:
    var a = null;
    if(a != null) {
       // do
    }

    雖然多種否定條件也沒有問題,但是明顯程序變的復雜和難以閱讀,而且你需要學習各種否定條件。

    2. Dart可以使用類型
    JS開發者往往強調,類型會降低靈活性。OK,也許是對的。但是過多的靈活性會讓你的軟件崩潰。有時候,你需要用到類型,在Dart中,這就可以實現,你可以啟用類型檢查。

    3. JS需要一個框架來解析DOM
    看看JS的這些方法吧:
    getElementsById()
    getElementsByTagName()
    getElementsByName()
    getElementsByClassName()
    querySelector()
    querySelectorAll()
    document.links
    document.images
    document.forms
    document.scripts
    formElement.elements
    selectElement.options
    強大嗎?但是我們有JQuery,Dart學習了JQuery,只有兩個方法:
    elem.query('#foo');
    elem.queryAll('.foo');
    4. 類和接口
    當Java開發者剛開始寫JS的時候,他們總是把JS寫的跟Java一樣。他們會寫類和構造函數,很顯然,JS不是這么玩的。在JS中,任何東西都是對象,這看起來很酷,但是那些設計模式就沒有用了。取而代之的是JavaScript的設計模式。但這給開發者造成了很多困惑,也讓代碼一團糟。

    5. 繼承
    用JavaScript有很多方式實現繼承,例如 Dr. Rauschmayer 博客(http://www.2ality.com/2011/11/javascript-classes.html)中講的那樣。或者你也可以用Prototype和jQuery框架,或者你也可以自己實現一套繼承的機制。這樣就很混亂,為了實現繼承這個目標,JS有很多不同的做法,讓人頭疼。

    Dart有類這個概念,所以也就有“extends”這個關鍵詞。一切都很簡單!

    6. 全局名字空間
    在JS中,如果你有什么變量在全局級別的話,所有的腳本都可以訪問這個變量,這就很恐怖,代碼會變的很混亂感。后來我學習了Stoyan Stefanovs Book JavaScript Patterns (http://astore.amazon.de/neoteccde-21/detail/0596806752),我的命名空間從此變的很干凈。但是為什么這種基本的功能語言不能自帶,而需要通過所謂的模式來解決這個問題呢?

    Dart默認是“library”范圍,只有聲明為 public 的東西才能被外部訪問。這樣就很簡單,不同的腳本不會相互影響。

    7. Dart支持并行
    JS是沒有真正的并行的。即使你通過jQuery發出一個異步請求,你也只有一個線程在工作。你可以通過HTML5,webworkers來解決這個問題。

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

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

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

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

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


    總結
    JS有很多優點,有一些不錯的模式。但是到目前為止,我還沒有發現什么JS能做而Dart不能做的。Dart明顯更優雅,更易于閱讀(對我而言)。也許有一些JS狂人覺得JS好,可以理解。

    英文原文

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色