1. 概述
Dart 是 Google 下一代操作系统 Fuchsia 的御用程序开发语言,而是 App 跨平台框架 Flutter 使用的开发语言。它是一种面向对象的语言,使用 C 风格语法,揉合了 Javascript、Python、Java 等语言的相关特性。
如果之前熟悉这几门语言,可以快速入门。
2. 应知就会
2.1. 语句结束符
同 C 语言一样,Dart 所有语句都以 ;
结束。
2.2. 注释
同 Javascript,单行用 //
, 多行用 /* */
。
如果要支持文档生成工具,则单行注释用 ///
,多行注释用 /** */
, 例如:
/// This is a documentation comment
/**
This , too,
is a
documentation comment.
*/
2.3. 变量声明与类型
Dart 是强类型语言,即所有变量都是有类型的。
同 C 语言一样,可以在声明变量时指定类型 <specific_type> variable;
,如:
int a = 3;
也可以同 Javascript 中一样,用 var a = 3;
声明,此时 Dart 会从赋值语句的右值推导出变量的类型,如本例中将推导出 a
变量是 int
型。
那么之后该变量的类型就确定了,不能再赋值其它类型的值了,例如本例中再给 a 赋值字符串值编译会通不过: a = "String Value";
。
如果将变量声明为 dynamic
类型,那么当变量赋值为一个类型的值后,可随时再次赋值为其它类型的值,如:
dynamic x = 42;
x = "Hello World";
同 Java 一样, Dart 中的一切都是对象,都最终继承自 Object
类,因此将变量声明为 Object
类型类似于声明为 dynamic
类型,可以赋值任何类型的值,如:
Object x = 42;
x = "Hello World";
两都区别是: dynamic
类型告诉 Dart 不要查检变量的类型,即关闭类型检测功能,因此若引用 dynamic 变量上不存在的方法时,编译是能通过的,但在运行时出错; 而引用
Object
类上不存在的方法时,编译就不能通过。
2.4. 常量和 final 值
同 Java 类似,常量值用 const
修饰,常量值在编译时就被确定,不能修改,如:
const x = "Hello";
const String y = "world";
而 final
变量可以在运行时赋值,但只能赋值一次,例如想确定程序启动时间值,可以声明为一个 final
变量,如:
final x = DateTime.now();
const
不仅能修饰变量,也可以修饰值,如:
List lst = const [1, 2, 3];
lst[0] = 999; // compile error
2.5. 类型
基本类似用小写开头,如 int, double, num, bool
, 其中 num
是 int, double
的父类。其它类型以大写开头,如 String, List, Map
。
2.5.1. 数字型
同 C 一样,int, double, num
都支持 +, -, *, /, %
。数字型唯一特殊的操作符是 ~/
,表示返回除法结果的整数部分,功能同 Python 中的 //
操作符,如:
int x = 3;
double y = 2.0;
x = x ~/ y;
print(x); // 1
同 C 中一样,dart 中 x = x + y
也可以缩写为 x += y
,这种缩写同样适用于 -, *, /, %
和 ~/
操作符,如 x = x ~/ y
可写为 x ~/= y
。
也有 C 中类似的 v++
, ++v
, v--
, --v
等前后缀操作符及三元条件表达式如: x = a ? b : c
。
Dart 中还支持一种特有的二元条件表达式,如 x = a ?? b;
,表示当 a 有值时(即不为 null 值,声明的变量未初始化时值默认为 null),x 赋值为 a,否则赋值为 b。
2.5.2. 字符串型 String
同 Javascript 中类似,字符串即可以用单引号 'xxx'
,也可以用双引号 "xxx"
表示。字