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

相关文章
相关标签/搜索