Google Dart抗衡JavaScript的十大亮点

Johnny21 等级 564 0 0

【IT168 技术】导读:Google是家充满创新力的公司。他们不喜欢Javascript了,于是自己推出了Dart。不负众望,Dart在今年的编程语言排行榜中成了一匹黑马,一经发布便窜到了排行榜107位,次月居然到了63,速度惊人。

根据原文编译的内容如下:

Dart是Google推出的新的结构化Web编程语言。我对它一见钟情。有人对我说,你需要深度剖析JavaScript,否则你无权评论它的优缺点。坦诚的说,我算不上一位JavaScript Ninja,但我坚信一种语言应该简单易学,容易理解,语言结构方面尽量合理。

一直以来,我都在实践中解决JavaScript的不足之处,我也承认JavaScript有很多不错的功能。但我不得不说,每天与它工作时我得非常非常小心。这一点很是糟糕,编程语言应该得到程序员的友好支持,而非相反。

下面是JavaScript的不足之处,这也是迫使我转投Dart的原因。

1. Dart uses only one falsify (Dart只使用一种否定条件)

看到这个标题,会容易想到false, null, undefined, “”, 0, NaN 作为否定条件,你可以这样写:

var a = null; if(!a) { // do
}

在Dart只有唯一的false,可以写成这样:

var a = null; if(a != null) { // do
}

虽然可以使用情形6中的否定条件,前提是你要好好了解它们。

2. Dart can work with types, If you want it(只要你想,Dart可以使用类型)

JavaScript开发者常说types(类型)会抹杀了灵活性,或许这是真的,但是太多的灵活性会毁掉你的软件。另一方面,Dart可以很好的用types编程。

3. You need a framework to work proper with DOM (你需要一个框架来解析DOM)

在JavaScript中,你可以这样写:

getElementsById()  
getElementsByTagName()  
getElementsByName()  
getElementsByClassName()  
querySelector()  
querySelectorAll()  
document.links  
document.images  
document.forms  
document.scripts  
formElement.elements  
selectElement.options

这样不是很完美吗?使用jQuery来帮助我们。也并不是非要从选择框架来解析DOM。

但Dart有了jQuery,只需以下2点:

elem.query('#foo');  
elem.queryAll('.foo');

4. Classes and Interfaces (类和接口)

当Java开发人员使用JavaScript时,他们经常尝试着去编写代码,就像编写Java代码一样。有构造函数和类等元素。当然,这不是JavaScript的编程方式。它是基于以一切项目为标准。

5. Inheritance(继承)

Rauschmayer博士发表过一篇优秀的博文,他在博客中解释了为什么JavaScript inheritance很简单。但值得注意的是:他的建议不是JavaScript inheritance的唯一途径。Frameworks Prototype和jQuery创建了“扩展”方法。Rauschmayer博士使用__proto__,你可以使用prototype keyword ,当然,你也可以实现自己的扩展机制,简单复制每个属性。用Google搜索“javascript object extends”弹出的所有结果,有各种各样的方法,只为实现一个目标:扩展。

Dart里有classes概念和“extends”关键词,非常简单。

6. Global namespace (全域名空间)

在JavaScript中你需要注意,不要搅乱全域名空间,老实说,这个很容易。如果错过了“this”或“var”变量,导致每个脚本都能访问它,这是非常可怕的,尽量别搞乱这些。这里要感谢Stoyan Stefanovs Book JavaScript Patterns使我认识到保持域名空间清洁的重要性。现在我感觉好多了,同时也易于控制。

在Dart里扩展了“library”范围,意味着你有一个关键的“library”仅对外开放的部分。此外,每一个Dart脚本能独立执行,有一个活动区域。使用Dart你还应该思考visibility和libraries,这将成为你学会Dart的一种简易方式,,而不需要从其他书籍中获知。

7. Dart knows concurrency (Dart支持并行)

使用JavaScript不是真的并行,即使是但也需要你做出一个“jQuery异步需求”,你依然在“thread”中运行,你可以从V8中获得更多,你也可以通过HTML5和webworkers来解决。

Dart支持Isolates,这有点像Erlang,它们之间可以相互沟通,如果其中一个失败了,另一个Isolate可以再次启动。当然这使Dart成为一个非常不错的服务端编程。

8. JavaScript doesn’t know foreach (JavaScript不支持foreach)

你可以扩展Object或者Array.prototype,或者也可以采用以下数组:

for (var i = 0; i < elements.length; i++) { // do something
}

你还可以设置objects:

for (key in elements) {
  alert(elements\[key\]);
}

       而不幸的是Douglas Crockford(在JavaScript界一位很了不起的人物),不建议使用此语句。原因:你的结果不是排序的,我可能会从prototype chain或者function names命名。当然你也可以过滤hasOwnProperty。最后,你应该看下框架文件,如果他们提供了相应内容。

而在Dart中:

for (element in elements) { // do something
}

就是这么简单!

9. Weirdness intializing arrays(数组初始化)

看看这个代码:

var a1 = new Array(1,2,3,4,5); var a2 = new Array(5);

a1有5个元素的数组:[1,2,3,4,5]

a2具有5个元素的数组:[undefined,undefined,undefined,undefined,undefined]

而Dart就更加简洁:

List a1 = [1,2,3,4,5];
List a2 = new List(5);

同样的,a1包含5个不同的元素数组,a2包含5个元素数组。此外,你还可以获得一个不错的功能“removeRange”可支持排序。

10. undefined和null

当使用JavaScript时你需要学习很多,该类型值:undefined。它可被重写。你可以通过各种方案获得,例如:假如你调用返回,但不返回任何数值,在链接的页面上,你可以看到如何处理一个可能被覆盖未定义的值。Null可以通过undefined在多种方案下调用。

而Dart只需要一个null。

结束语:

当然,JavaScript也有很多好的部分,比如一些不错的模式,但目前来说,使用Dart也能实现这些功能。我认为Dart更优雅,更容易阅读。或许,JavaScript的一些铁杆开发者不这么认为,没关系,只要喜欢你可以继续使用JavaScript。但我想,Dart或许会在另一面成为主流。

收藏
评论区

相关推荐

[Dart]Dart语言之旅<一>:简介
我们假定你已经知道如何用另一种语言编程,《Dart语言之旅》将向你展示了如何使用每个主要的Dart特性——从变量和运算符到类和库。 一个基本的Dart程序 下面的代码使用了许多Dart最基本的功能: // Define a function. printNumber(num aNumber) { print('The number is $a
Dart官方文档翻译(一)(Dart之旅)
这篇文章将会向你展示如何使用Dart的每一个知识点,包括变量,操作符,类,类库,但这是在你已经有一个其他语言的编码经验的前提下。 为了学习Dart更多关于Dart的核心类库,请查看A Tour of the Dart Libraries,当你想知道更多语言特征,挺查阅Dart language specification 你可以通过DartPad 来尝试
<Dart基础>Dart简介
Dart基础系列: Dart简介(https://www.jianshu.com/p/c749f40828a5) Dart语法(上)(https://www.jianshu.com/p/6b5689342e24) <基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679) 一、简
Dart基础&gt;Dart语法(上)
Dart基础系列: Dart简介(https://www.jianshu.com/p/c749f40828a5) Dart语法(上)(https://www.jianshu.com/p/6b5689342e24) <基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679) 说明:
Dart基础语法简介
Dart基础系列: Dart简介(https://www.jianshu.com/p/c749f40828a5) Dart语法(上)(https://www.jianshu.com/p/6b5689342e24) <基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679) 一、简
flutter -- dart基础之dart简介和安装
Dart介绍: Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。 Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。 要学Flutter的话我们必须首先得会Dart。 da
Dart | 浅析dart中库的导入与拆分
前言 最近十分热门的跨平台框架使用了一门比较生僻的编程语言dart。dart语言本身深受早期一些编程语言的影响。特别是Smalltalk,Java和JavaScript。我是从Java语言向dart过度的,一开始感觉很不错,快速就对这门语言有了一个初步的认识,并能够写小段代码了。 但在flutter的不断学习过程中,我遇到了不少因为dart的一些语
Dart教程(一):dart安装
一、安装dart sdk brew tap dartlang/dart brew install dart 二、安装VSCode 去官网下载即可 三、安装dart插件 (https://imghelloworld.osscnbeijing.aliyuncs.com/af7d1de25caf6599a4839b56f4f0d
【Flutter实战】初识Flutter
1.2 初识Flutter 1.2.1 Flutter简介Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flu
【Flutter 实战】Dart语言简介
1.4 Dart语言简介在之前我们已经介绍过Dart语言的相关特性,读者可以翻看一下,如果读者已经熟悉Dart语法,可以跳过本节,如果你还不了解Dart,也不用担心,按照笔者经验,如果你有过其他编程语言经验(尤其是Java和JavaScript)的话会非常容易上手Dart。当然,如果你是iOS开发者,也不用担心,Dart中也有一些与Swift比较相似的特
【Flutter实战】Dart线程模型及异常捕获
2.6 Flutter异常捕获在介绍Flutter异常捕获之前必须先了解一下Dart单线程模型,只有了解了Dart的代码执行流程,我们才能知道该在什么地方去捕获异常。 2.6.1 Dart单线程模型在Java和ObjectiveC(以下简称“OC”)中,如果程序发生异常且没有被捕获,那么程序将会终止,但是这在Dart或JavaScript中则不会!
Google Dart抗衡JavaScript的十大亮点
【IT168 技术】导读:Google是家充满创新力的公司。他们不喜欢Javascript了,于是自己推出了Dart。不负众望,Dart在今年的编程语言排行榜中成了一匹黑马,一经发布便窜到了排行榜107位,次月居然到了63,速度惊人。 根据原文编译的
Dart中的抽象类、多态、以及接口
一、Dart中的抽象类 Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。   1、抽象类通过abstract 关键字来定义   2、Dart中的抽象方法不能用abstract声明
Flutter - 深入理解Dart虚拟机启动
基于Flutter 1.5,从源码视角来深入剖析引擎启动中的Dart虚拟机启动流程,相关源码目录见文末附录一、概述 1.1 Dart虚拟机概述Dart虚拟机拥有自己的Isolate,完全由虚拟机自己管理的,Flutter引擎也无法直接访问。Dart的UI相关操作,是由Root Isolate通过Dart的C调用,或者是发送消息通知的方式
Dart虚拟机运行原理
一、Dart虚拟机 1.1 引言Dart VM是一种虚拟机,为高级编程语言Dart提供执行环境,但这并意味着Dart在D虚拟机上执行时,总是采用解释执行或者JIT编译。 例如还可以使用Dart虚拟机的AOT管道将Dart代码编译为机器代码,然后运行在Dart虚拟机的精简版环境,称之为预编译运行时(precompiled runtime)环境,该环境不包含任何