Dart 比 JavaScript 更酷的10个理由

标签: dart javascript | 发表时间:2014-06-02 22:13 | 作者:edagarli
出处:http://blog.segmentfault.com/edagarli

Dart 是 Google发明的一种新的编程语言。在使用JavaScript一年多以后,我对Dart可谓是一见钟情。我以前是做Java的,我在用JS的时候要学习很多新东西。

有人说你必须深入研究JavaScript,否则你没有资格评论它。我不是JS高手,但是我坚信一门编程语言应该易于学习,易于理解,并且语言结构要合理。虽然我也长时间和JS打交道,虽然我也知道JS有很多酷的功能,但是我还是每天得小心翼翼的处理JS的问题。这就很不好,编程语言应该对程序员友好,而不是程序员去伺候一门语言。

下面我将列出Dart比JavaScript强的地方,也是吸引我转移到Dart的原因。

  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中,这就可以实现,你可以启用类型检查。

  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

相关 [dart javascript] 推荐:

Google计划用Dart替代Javascript

- tinda - Solidot
Google的新程序语言Dart可能是设计去替代Javascript. 2010年11月泄漏的内部电邮显示,Dart是Google构思用于克服Javascript“基本缺陷”的一种方法,这些缺陷遏制了Google开发复杂的Web应用. 根据邮件内容,Google的Mark S. Miller称,至少二十Javascript框架和设计模式,让Javascript变成了“令人迷惑的迷宫”,Dash的最终目标是替代JavaScrip作为Web开发的通用语言.

Dart 之于 JavaScript 正如 C# 之于 C++

- Tim - ITeye资讯频道
在谷歌工程师拉尔斯·巴克(Lars Bak)的V8 JavaScript解释器颠覆了Firefox所宣称的速度这一背景之下,我们有理由相信,谷歌新的网络开发语言很可能与Smalltalk类似. 但是这可能会引领网络走向一个截然不同的方向. 在丹麦举行的网络开发者大会上,谷歌和Chromium开源开发团队的成员揭开了谷歌寄予厚望的新的、更为结构化的网络编程方法——Dart的神秘面纱.

Google 发布 JavaScript 到 Dart 翻译器

- - 谷奥——探寻谷歌的奥秘
由于嫌JavaScript太烂,所以 Google之前发布了自己的Dart语言. 这个新的平台可适合开发简单、高效而具有可扩展的网页应用,整合了强大的全新的编程特色,但却同时具备你熟悉的语言语法结构. 今天Google则发布了 JavaScript 到 Dart 翻译器,这个应用可以告诉你Javascript和jQuery的变量、函数、类库、DOM操作、数组等等,转换成Dart版本之后语法应该怎么写.

Dart 比 JavaScript 更酷的10个理由

- - justhacker的专栏 - SegmentFault
Dart 是 Google发明的一种新的编程语言. 在使用JavaScript一年多以后,我对Dart可谓是一见钟情. 我以前是做Java的,我在用JS的时候要学习很多新东西. 有人说你必须深入研究JavaScript,否则你没有资格评论它. 我不是JS高手,但是我坚信一门编程语言应该易于学习,易于理解,并且语言结构要合理.

谷奥: Dart VS. JavaScript - 上篇:JavaScript 的历史包袱

- mingelz - 谷奥聚合——谷奥主站+谷安 aggregator
敬告:本文作者没写过上万行的代码,文中信息全部为道听途说,未经查证;文中观点可能偏颇狭隘一根筋,谨做抛砖引玉之用. 望达者查之,读者自重,喷者迅猛. Google 近日推出 Dart 语言,剑指大红大紫的 JavaScript. 为什么 Google 挑了这个看着不软的柿子,Dart 能不能顺利推倒傲娇的 JavaScript,这篇文章主要分析这两个口水侧漏的问题.

Google 欲强推仅有 Chrome 支持的 Dart 语言代替 Javascript

- 瑠音北樟 - 谷奥——探寻谷歌的奥秘
在10月即将召开的GOTO开发者大会上,Google工程师说他们将宣布一个新的编程语言的细节,而其名称就叫做DART. 即将在GOTO开发者大会上做主题演讲的是Google的工程师Lars Bak,它负责Chrome V8 Javascript引擎,之前有过虚拟机的开发经验. Bak持有大量专利,不过主要都来自早先在SUN工作时期获得的.

Google正式推出Dart语言,欲将Javascript赶下神坛

- Feng - Tech2IPO
近日,Google正式发布了其结构化网页编程语言Dart. 决心通过其撼动Javascript网页编程统治地位. 确实,Javascript作为一个10天完成开发的赶工产品,自推出以来一直被不少程序员所诟病,连其创造者也并不对其满意(更多详细资料推荐参考 阮一峰的《Javascript的10个设计缺陷》及《Javascript诞生记》).

Google Dart语言分析

- Jack - Solidot
Google最新推出的Dart语言引发了热议. 它是一种适合服务器端和客户端应用程序开发的程序语言. InfoQ的一篇分析文章认为,Dart的一些特性解决了Java或Javascript语言长期以来没有解决的问题. 它的Snapshots特性类似Smalltalk images,允许应用程序即时启动.

Google将宣布新编程语言Dart

- 李龑 - Solidot
Google的两位工程师将在下个月举行的Goto软件开发会议上宣布一门全新的编程语言Dart. 这门新语言是为结构化的Web编程设计的,适用于开发基于浏览器的Web应用. Google还没有透露Dart的任何技术细节. Google在2009年曾发布了主要针对服务器端的Go语言.