Dart是什么?
Dart是一门新的编程语言,如同JAVA、PHP一样,是为了解决编写应用程序中的一些实际问题而被造轮子发明出来的,而这个造轮子的人就是 Google。可能大家都熟悉Google 的另一个轮子Golang,而对Dart 听闻甚少,其实Dart 的出生跟Go很相近,只是由于它的星途比起Go来说有点坎坷,一直没有被广大开发者重视,相关的技术文章和应用比较匮乏,也就一直蒙尘在泛泛语言之中。
最初设计Dart,是Google的一帮程序员出于对JavaScript的不满,决定自己搞一个新语言用来替换JavaScript的,所以刚开始Dart也就是用来作为浏览器脚本运行在浏览器中的。为了推广Dart,Google利用自己的利器Chrome让它内置了DartVM的引擎。有了运行环境,加上用户群的可观数量,Dart最初也赢得了部分前端开发者的青睐。但是!!!,咳咳,这里要停顿一下,有转折——Google的这帮程序员万万没想到,看似并无大用的JavaScript居然因为NodeJS而焕发了第二春。此时移动互联网处于萌芽发展中,一个叫做NodeJS的开源项目借助这股移动互联的东风顺势而起,很快的烧遍了前端、烧到了后端,甚至烧到了手机应用和桌面应用,可以说是在编程界无孔不入,几乎成就了JS程序员口中的“凡是能被JS实现的,最终都要被JS实现”的愿景。前端的开发模式因此而改变,进入了一个新的天地。一些明星项目如React、React-Native、Vue等等如雨后春笋般迅速的崛起,一句话总结就是“Javascript很忙”。
Javascript很忙,程序员更忙,Dart就这样被慢慢地遗忘在角落。加上一直以来缺少顶级的项目使用,就算再是亲儿子,得不到JS开发者的心,Google也没什么办法,在2015年的时候,Google在Chrome中默默的移除了内置的Dart引擎。但是!!!这里又是但是,我喜欢在但是这里停顿一下,可以刷存在感2333——Google并没有放弃Dart,Google内部用Dart编写孵化了一个移动开发框架Sky,之后又被命名为Flutter,进入了移动跨平台开发的领域。如同Javascript,Dart在服务端和浏览器前端也在不遗余力的发展:服务端可以编写命令行程序,前端可以编译成Javascript运行在浏览器中。Google的另一个前端大杀器Angular也有对应的Dart版本。在Google的未来操作系统Fuchsia中,Dart被指定为官方的开发语言。
Dart的发展经历这么多,在历史的版本迭代中,已经不是当初设计的仅仅作为一个脚本运行在浏览器中了。船小好调头,也正是使用者较少,没有历史包袱,Dart的创造者们总结了Dart1.0版本的优缺点,决定打造一个运行更快、更加安全的强类型语言Dart2.0(在Dart2.0之前,Dart是一门弱类型语言。变更为强类型语言(注:官网原文是 Dart 2.0 has a sound type system )之后,Dart依旧可以使用类型推断等弱类型语言的特性)。Dart 团队已于2018年8月正式发布 Dart 2.0 , 目前稳定版为 2.1。【2018.12修改】Dart2.0版本目前正处于dev的状态,开发者可以使用Dart进行开发了,在不久之后就会发布正式的版本。
Dart 属于什么级别的语言
Dart 属于应用层编程语言。它有自己的 DartVM ,通常情况下运行在自己的VM上,但是在特定情况下他也可以编译成 Native Code 运行在硬件上(比如移动开发框架中,Flutter 会将代码编译成指定平台的 Native Code 以提高性能)。运行 Dart 编写的软件,既可以以明文代码的方式直接运行,还支持运行快照打包后的二进制,以提高启动速度、安全性和性能。你可以将它当做JAVA,亦可以当做 JavaScript;它比 JAVA 简单,易于理解,比JavaScript 更加规范,更加工程化。
Dart 的特性
单进程异步事件模型;
强类型,可以类型推断;
DartVM,具有极高的运行效率和优秀的代码运行优化,根据早前的基准测试,性能比肩 Java7 的JVM;
独特的隔离区( Isolate ),可以实现多线程;
面向对象编程,一切数据类型均派生自 Object ;
运算符重载,泛型支持;
强大的 Future 和 Stream 模型,可以简单实现高效的代码;
Minix 特性,可以更好的实现方法复用;
全平台语言,可以很好的胜任移动和前后端的开发。
在语法上,Dart 提供了很多便捷的操作,可以明显减少代码量。比如字符连接,可以直接 "my name is $name, age is $age",无需+号拼接,也无需做类型转换。
使用 Dart 可以做什么
登录 Dart 的官网,你可以很清楚的看到 Dart 的创作者将 Dart 明确的分成了三个方向: 移动开发、DartVM 命令行程序(Server 端)、浏览器(前端)。
移动开发:这是 Dart 的杀手锏,也是众多 Dart 开发者开始接触学习 Dart 语言的原因。这个移动开发的核心是叫做 Flutter 的一个框架,它使用Dart + C++ + Skia 开发,对外提供了完全不依赖系统平台的 Widget 的能力,只通过自绘图形的方式工作,因此具有极其优秀的跨平台性。目前已经支持了 iOS、Android、Fuchsia。可以想象,你对应 Android 编写的一套软件可以不用修改一行代码的运行在 iOS 中,甚至是未来的 Fuchsia 中(尽管不知道这个系统最终能不能发布出来),是不是很有要马上去尝试的心动?
DartVM 命令行程序:就是写服务端的应用。比如写个 http 的服务,对应用提供 api ,都是及其简单的事情。和 JavaScript 一样,Dart 也是单进程异步事件的模型,所以它天生擅长高并发,而且它还提供了隔离区(isolate)的接口,可以实现多线程的操作,应对CPU密集型场景也不再话下。
浏览器:这个应该是 Dart 一开始造轮子的初衷,结局嘛,大家也都是知道,还是 JS 一统江湖。所以我只是建议大家在前端用用看,毕竟 Angular 也有官方的团队在支持 Dart 的版本,而且用 JS 写简单的应用还好,复杂的场景下那个代码真的是。。。。这个时候用 Dart 一定会给你一个完全不一样的体验。当然,可能开发效率上Dart会逊色一些,但维护成本上 Dart 绝对碾压 JS。(这里用“碾压”是一种夸张的手法,望知.)
总之,Dart 可以做的很多,涉及到编程的方方面面。但是当下我最看好的是移动开发的前景。Google 也是想鼓励开发者使用这个Flutter 来为以后的 Fuchsia 打基础,做生态,所以 Flutter 这块各位可以放心大胆的用起来。对。就是现在!!!
为什么要用 Dart
Dart 仅仅是你工作中解决问题的一种选择,我认为特定的场景中使用最适合的语言编程才是聪明人的做法,所以为什么要用 Dart 这取决于你。如果非要给个理由,那可能就是 Flutter 让你爱上的原因。
学习 Dart 的路线
不管你是 JavaScripter、JAVAer,还是PHPer、Pythoner,还是Goer、Ruster,都可以用极低的成本学习 Dart ,并在短时间内上手做东西。如果你是一个开发的入门者,那我建议你还是先学习一下国民语言C,无论你是不是要学习 Dart,你都应该先走学习 C 的路线。
学习 Dart 的路线,我只针对有编程经验的人来说,可以分成四步:基础语言语法 ;代码编写风格;基础类库的使用;开始你的编程。
我比较鼓励开发者在学习新语言的时候尽早的上手项目去使用它。只有你在编程中反复的使用,你才会理解继而更好的运用这个语言的优势。如果可能,还可以在一段时间后对代码进行重构,更能加深对该语言的组织和整体语言的进一步理解。