本文首发于公众号「刘望舒」
关联系列
ReactNative入门系列
React Native组件
Flutter基础系列
前言
Dart是Flutter SDK指定的语言,因此要学习Flutter,Dart是必须掌握的。关于Dart可以写一本书了,这里用一篇文章来介绍下Dart的精髓,带你快速入门。和Java语言类似的部分,这篇文章就尽量不再讲了。
1. Dart开发环境搭建
学习Dart语法最好需要用一个编辑器来实践,这里推荐使用IntelliJ IDEA。先下载Dart SDK,地址为:http://www.gekorm.com/dart-windows/
打开IntelliJ IDEA,菜单中点击File–>Settings–>plugins,在plugins的搜索框中搜索Dart并安装,然后重启IntelliJ IDEA。
点击File–>New Project–>Dart,按照下图配置Dart SDK。
注意要选择第三个选项Constole Application,否则会默认创建一个Web项目。点击Next然后配置项目的名称就可以创建项目了。
在项目中的bin/main.dart中加入如下测试代码:
void main() {
print("Hello World");
}
点击菜单的Run–>Run’main.dart’或者点击工具条的运行图标,就能在控制台看到输出的结果:
2. Dart概述
Dart是谷歌开发的计算机编程语言,亮相于2011年10月,最新的版本是Dart2。Dart诞生的原因是谷歌的工程师出于对JavaScript的不满,诞生的初期也赢得了部分前端开发者的青睐。但是这时JavaScript借着NodeJS火了起来,在前端、后端、移动端无孔不入,Dart就渐渐被人遗忘了,可见Dart本身是具有很强的实力的,只是不大走运。谷歌并没有放弃Dart,不遗余力的推广Dart:谷歌的Angular提供了Dart版本,指定Dart为新系统Fuchsia的官方开发语言,Dart为移动UI框架Flutter的开发语言,因此Dart又重新回到了人们的视野中。
Dart通常情况下运行在DartVM上,但是在特定情况下它也可以编译成本地代码运行在硬件上,比如Flutter会将代码编译成指定平台的本地代码来提高性能。
3. Dart特性和重要概念
Dart的特性主要有以下几点:
- 执行速度快,Dart是AOT(Ahead Of Time)编译的,可以编译成快速的、可预测的本地代码,这使得Flutter几乎都可以使用Dart来编写。也可以采用JIT(Just In Time)编译。
- 易于移植,Dart可编译成ARM和X86代码,这样Dart可以在Android、iOS和其他地方运行。
- 容易上手,Dart充分吸收了高级语言特性,如果你已经熟悉C++、C、Java,可以在短短几天内用Dart来开发。
- 易于阅读,Dart使Flutter不需要单独的声明式布局语言(XML或JSX),或者单独的可视化界面构建器,这是因为Dart的声明式编程布局易于阅读。
- 避免抢占式调度,Dart可以在没有锁的情况下进行对象分配和垃圾回收,和JavaScript一样,Dart避免了抢占式调度和共享内存,因此不需要锁。
Dart的重要概念有以下几点:
- 在Dart中,一切都是对象,每个对象都是一个类的实例,所有对象都继承自Object。
- Dart在运行前解析所有的代码,指定数据类型和编译时常量,可以使代码运行的更快。
- 与Java不同,Dart不具备关键字public、protected、private。如果一个标识符以下划线
_
开始,那么它和它的库都是私有的。 - Dart支持顶级的函数如main(),也支持类或对象的静态和实例方法,还可以在函数内部创建函数。
- Dart支持顶级的变量,也支持类或对象的静态变量和实例变量,实例变量有时称为字段或属性。
- Dart支持泛型类型,如
List<int>
(整数列表)或List<dynamic>
(任何类型的对象列表)。 - Dart工具可以报告两种问题:警告和错误。警告只是说明代码可能无法正常工作,但不会阻止程序执行。错误可以是编译时或运行时的。编译时错误会阻止代码执行; 运行时错误会导致代码执行时报出异常。
4. Dart关键字
关键字 | |||
---|---|---|---|
abstract | dynamic | implements | show |
as | else | import | static |
assert | enum | in | super |
async | export | interface | switch |
await | extends | is | sync |
break | external | library | this |
case | factory | factory | factory |
catch | false | new | true |
class | class | null | try |
const | finally | on | typedef |
continue | for | operator | var |
covariant | Function | part | part |
default | get | rethrow | while |
deferred | hide | return | with |
do | if | set | set |
5. 变量
变量声明使用var关键字,未初始化的变量的初始值为null,即便是数字类型的变量也是null。
var name = 'liuwangshu';
name变量的类型被推断为String,也可以显示声明:
String name = 'liuwangshu' ;
如果对象不限于单一类型,可以指定Object或dynamic类型。
Object name = 'liuwangshu' ;
如果定义的变量不会变化,可以使用final或const来代替var,final变量只能设置一次。
final name = 'liuwangshu'
//name = 'zhangwuji' ; //会报错
const变量为编译时常量,如果const变量在类级别,可以使用static const。
const pi = 3.1415926;
const area = pi * 60 * 60;
const不仅仅用来定义常量,也可以使用const来创建常量的值。
var foo = const []; final bar = const []; const baz = [];//相当于`const []`
6. 基本数据类型
Dart的基本数据类型包括Number、String、Boolean、List、Set、Map、 S