代码成诗-dengsgo的个人博客

Dart 语言的介绍

deng-dev  发布在  更新于 Dart编程

Dart Logo

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.8。【2020.04修改】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 特性,可以更好的实现方法复用;
  • Null 安全操作,如 NullableObject?.dosth()
  • 全平台语言,可以很好的胜任移动和前后端的开发。
  • 在语法上,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 的路线,我只针对有编程经验的人来说,可以分成四步:基础语言语法 ;代码编写风格;基础类库的使用;开始你的编程。

我比较鼓励开发者在学习新语言的时候尽早的上手项目去使用它。只有你在编程中反复的使用,你才会理解继而更好的运用这个语言的优势。如果可能,还可以在一段时间后对代码进行重构,更能加深对该语言的组织和整体语言的进一步理解。

Dart 入门教程

见官网 language-tour

Program End Flag ……

 

有帮助, 给作者捐赠一杯 Mojito 🍹 吧

deng-dev
保持敏锐的技术嗅觉,去探知无尽的想象力