1. 简介
Google的东西用起来一般感觉都不赖,即便是编程语言,这点也没变。Dart不单单只是一门语言,其相关的配套设施也一应俱全:
- DartIDE:简单好用的IDE,当然更推荐使用JetBrains系列的IDE,配上Dart的插件
- dartanalyzer:语言分析工具
- dart2js:js转换工具
- dartfmt:代码格式化工具
- docgen:文档生成工具
- pub:官方自带的包管理工具(官方给出解决方案肯定比第三方出包管理工具要好太多太多了)。
Dart给我的印象是多种语言的优点的集合。再深入点,你会发现Dart最主要是受了JavaScript和Java两种语言的影响。设计模式上更倾向于Java,而语言本身的使用则更倾向于JavaScript。从服务器角度来说,Dart和NodeJs是一脉相承的:原生的lambda表达式,原生的异步IO支持,单进程的设计,基本上和NodeJs没什么差别。
在接下来的文章里,主要以外部资源介绍为主,因为google官方给的文章内的指导已经非常到位了,不需要我再写班门弄斧的文字了。这里主要是理清思路。
2. 基础资源
- 官网:https://www.dartlang.org/
- 初学者:千万不要直接去看官网上的Tutorials,绝对是个坑(要先去看语法),官网上针对新手的页面应该是:Programmer's Guide。
- 语法指导:Dart: Up and Running >> Chapter 2. A Tour of the Dart Language,新手第一个要看的东西
- API文档:Dart API Reference,在需要用某些功能但是不清楚API细节的时候需要查阅的网站
- Coding Style:Dart Style Guide,官方的指导,掺杂了一些Dart的编程理念,不是单纯的coding style,照做就好
- 工具列表:Dart Tools,上面提及的系列工具的介绍和使用指导
- profile工具:当前版本 - 1.3.0,还未被包含在发布SDK内的profile工具:github/dprof,将来会被包含在SDK内发布
3. 语法
这里简单介绍与其他语言差别比较大的,需要特别注意的点:
- 变量的类型可指定,但不强制性要求指定,若指定,则在--checked模式,会进行排错,若不指定,则可以使用 var 来申明变量
- Final and Const 的差别,需要了解下。此外,补一篇外部外部文章:Const, Static, Final, Oh my!
- 整形的长度和别的语言有差异,要注意:-253 to 253
- 字符串的连字处理方式比较多,空格也可以,这里可以看下
- if等条件判断的时候,必须为布尔型的真才是真:Dart treats all values other than true as false
- 使用 => 的超缩略函数定义方式,别的语法没的,要注意下,官方命名为:arrow functions
- 函数的可选参数的定义方式和别的语言不同
- 诡异的 ~/ 运算符,运算结果是 除以 然后 向下取整,返回值是整形
- 类型检查语法,类似于ActionScript里的语法
- 类似于JavaScript里的循环闭包陷阱,在Dart中已经被处理了
- switch case必须要写break,只有在case内没有逻辑代码的情况下才能顺延,要不然就要使用 continue + label 的方式处理
- 语言自带 assert 函数,但仅在--checked模式下启用
- Exception和Error,此外参考这里,来了解两者之间的差异:stackoverflow.com >> Error vs. Exception in Dart
- throw 什么都能扔(真暴力。。。)
- catch 的语法和别的语言有点差异
- .. 两个点的语法,别的语言没的
- 构造函数这节仔细看下,很蛋痛,和别的语言完全不同,我觉得这里有点乱搞了,混合了好几种语言的做法
- getters 和 setters 不需要手写
- 操作符重载,这里要注意下,一般比较少见
- Mixin,算是个蛮新式的概念,Dart也有
- 父类的静态成员不会被子类继承,这个差异很大,见:stackoverflow.com >> Variables is not inherited?
- 类成员的访问可见性和别的语言完全不同,注意
- Dart里的类、包加载和管理的手段和Java类似,但功能更强大
- 类似于 C / C++ 语法的 Typedefs,要注意下
- Metadata (Annotation) 的定义和使用
- 和别的语言不一样的注释文档的编写规则
4. 教程文章
- Idiomatic Dart:教你如何使用dart式思考来编程,介绍了一系列dart式的语法和编程方式,基本上在读 Dart Style Guide 的时候顺道把这篇也干掉就对了。这篇文章里 Future.delayed 这段特别值得一读
- Guidelines for Dart Doc Comments:怎么写文档注释,主要了解下dart提倡的简单书写,以及在注释中使用markdown
- Emulating Functions in Dart:讲了在dart中函数动态调用相关的奇技淫巧,call函数,Function.apply函数,typedef函数的类型匹配,noSuchMethod函数,等
- Mixins in Dart:Mixin 代码混合,在dart里的实现和使用,看下三条原则,和几个例子就差不多了。Dart是没有interface这个关键字的,接口一般使用 abstract class 来定义,这里的 Mixin 也起到了类似的作用
- Snapshots in Dart:Dart的代码缓存机制,类似于字节码的东西?大概。官方说明是说能提高启动速度,不过我没看到能提高运行速度的说明
- Optional Types in Dart:Dart里动态类型的一些规则和最佳实践,比如说要不要申明、什么时候申明类型啊,--checked模式会检查什么,之类的
- The Event Loop and Dart:Dart的event loop是如何工作的,对于没接触过nodejs的人来说,这篇是非常重要的概念帖,里面有几点需要重点理解:
- Dart的queue有两个实现,其先后顺序是不同的,microtask queue会在event queue中的每个event执行之走完:Dart’s event loop and queues
- microtask queue现在的实现有bug,会导致其执行顺序不正常地放到event loop最后:Microtask queue: scheduleMicrotask()
- Numeric Computation:数字类型在Dart VM内的实现,以及如何使用它们,如何提升性能。在dart内部,int申明就有3种隐藏实现。注意Typed List这节,以及后续Pulling back the curtains这一大节里的优化点。
- Reflection in Dart with Mirrors: An Introduction:Dart语言里的反射机制,动态调用,和类定义了解,都需要使用这套工具