Dart 比 JavaScript 更酷的10个理由

虫虫 发布于 2012/01/04 18:58
阅读 7K+
收藏 17
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好,可以理解。

英文原文,OSChina原创翻译,转载请注明来自 OSChina.NET
加载中
1
Genus
Genus
dart不知道会怎么样?但是js的诸多优点更像是人云亦云的谎言。
呢喃的猫咪
呢喃的猫咪
回复 @郁也风 : 我太同意你的说法了...不过最深的恨也是源于最深的爱啊
郁也风
郁也风
基本上是写的js越多就会越痛恨这玩意
1
是哦為
是哦為

上面说的很多“缺点”,在我看来都是优点。另一些“缺点”是因为用的人多,支持广泛。而且最后的结论也很明了:有jquery就行了,用不着dart。

0
蟋蟀哥哥
蟋蟀哥哥

关键是哪些浏览器支持?哪些应用支持?javascript支持的东西更多.dart还有很长的路要走.

等到ms默认支持dart的时候,才是它的春天

0
leetom
leetom
现在这浏览器环境,一个js就够受了,再来个dart会变成啥样..
0
hopesfish
hopesfish
还好这是小众的东西
0
我土鳖

第九点JS也可以做到。

第八点JS可以用for...in语法遍历数组

第一点、第三点和第六点确实不错。

0
灵剑子
灵剑子

更多选择,更多欢乐。

科技要发展,首先要搞死老一批的CTO

0
watano
watano
原来dart还可以这么给力啊?一直以为只是一个js的代码生成器.
0
canghailan
canghailan
没有浏览器厂商支持的话都是浮云。语法上dart比java强多了,更期待dart的jvm版本,可惜Google明确不会官方支持了。
返回顶部
顶部