Dart语言之旅

本页向您展示了如何使用每个主要的Dart特性,从变量和运算符到类和库,假定您已经知道如何用另一种语言编程。
要了解有关Dart核心库的更多信息,请参阅Dart Library之旅。无论何时您想了解有关语言功能的更多详细信息,请参阅Dart语言规范

一个基本的dart程序

以下代码使用了Dart最基本的许多功能:

// 定义一个函数.
printInteger(int aNumber) {
  print('The number is $aNumber.'); // 打印到工作台
}

//这是应用程序开始执行的地方.
main() {
  var number = 42; // 声明并初始化一个变量
  printInteger(number); // 调用一个函数.
}

以下是适用于所有(或几乎所有)Dart应用程序的写法:

// 单行注释
//此外dart还支持多行注释和文档注释,详情见后面

int  //int类型,其他一些内置类型是String,List bool

42 //数字,数字是一种编译时常量

print() //一种很方便的打印方法

'......' or"......" //这两种都是表示字符串

$variableName (or ${expression})
//字符串插值:在字符串文字中包含一个变量或表达式的字符串。有关更多信息,请参阅字符串。
main()  //一个应用程序执行开始的特殊的、必须的函数,详情查看main函数
var //声明变量但不指定类型

重要概念

当你了解Dart语言时,要牢记这些事实和概念:

  • 你可以放在变量中的所有东西都是一个对象,每个对象都是一个类的实例。即使是数字,功能, null也是对象。所有对象都从Object类继承。
  • 虽然Dart是强类型的,但类型注释是可选的,因为Dart可以推断类型。在上面的代码中,number 被推断为是类型的int。当你想明确地说没有类型时, 使用特殊类型dynamic。
  • Dart支持泛型类型,如List<int>(整数列表)或List<dynamic>(任何类型的对象列表)。
  • Dart支持顶层函数(如main()),以及与类或对象绑定的函数(分别为静态方法和实例方法)。你也可以在函数中创建函数(嵌套函数或局部函数)。
  • 同样,Dart支持顶级变量以及绑定到类或对象(静态变量和实例变量)的变量。实例变量有时称为字段或属性。
  • 与Java,dart不具备关键字public,protected和private。如果标识符以下划线(_)开头,则它的库是私有的。有关详细信息,请参阅 库和可见性。
  • 标识符可以以字母或下划线(_)开头,然后是这些字符和数字的任意组合。
  • 有时候,重要的是某件事是一种表达式还是一种 声明,所以这两个词的确切含义很有帮助。
  • Dart工具可以报告两种问题:warnings 和errors。警告只是表明您的代码可能无法正常工作,但它们不会阻止您的程序执行。错误可以是编译时或运行时。编译时错误导致代码无法执行; 运行时错误导致 代码执行时引发异常。

关键词

下表列出了Dart语言特别处理的关键词。

abstractdoimportsuper
abstract1doimport 1super
as 1dynamic 1inswitch
assertelseinterface 1sync* 2
async 2enumisthis
async* 2export 1library 1throw
await 2external 1mixin 1true
breakextendsnewtry
casefactory 1nulltypedef 1
catchfalseoperator 1var
classfinalpart 1void
constfinallyrethrowwhile
continueforreturnwith
covariant 1get 1set 1yield 2
defaultifstatic 1yield* 2
deferred 1implements 1

1带上标1的单词是内置标识符。
避免使用内置标识符作为标识符。
如果您尝试为类或类型名称使用内置标识符,则会发生编译时错误。
2带上标2的单词是较新的,与Dart 1.0版本发布后添加的异步支持相关的有限保留字。
您不能使用async,await或yield作为用async,async 或sync 标记的任何函数体中的标识符。
有关更多信息,请参见异步支持

**关键字表中的所有其他字都是保留字。
您不能使用保留字作为标识符**

变量

以下是创建变量并初始化变量的示例:

var name ='Bob';

变量存储的是引用,命名为name的变量存储的是 值为"Bob"的字符创的一个引用
name变量的类型被推断为String,但您可以通过指定它来更改该类型。
如果对象不限于单一类型,请遵循设计指南指定对象或动态类型

dynamic name ='Bob';

另一种选择是显式声明将被推断的类型

String name = 'Bob';

默认值

未初始化的变量的初始值为null。即使数字类型的变量最初为null,因为数字 - 和Dart中的其他所有数据一样 - 都是对象

int lineCount;
assert(lineCount == null);
注意:assert()产品代码中 的调用被忽略。在开发过程中, 除非条件为真,否则会引发异常。有关详细信息,请参阅Assert。assert(condition)

Final和const

如果你从不打算改变一个变量,使用final或者const,而不是var或者其他类型。最终的变量只能设置一次; 一个const变量是一个编译时常量。(Const变量隐式final 。)final的顶层或者class变量在它第一次被使用时被初始化。

注意: 实例变量可以final但不是const。

以下是创建和设置最终变量的示例:

final name = 'Bob'; // 没有类型声明
// name = 'Alice';  // 取消注释会导致UC哦呜
final String nickname = 'Bobby';

将const用于想要成为编译时常量的变量。
如果const变量处于类级别,则将其标记为静态常量。
在声明该变量的位置,将该值设置为编译时常量,例如数字或字符串文字,常量变量或常数上算术运算的结果:

const bar = 1000000; // 压力单位(dynes/cm2)
const double atm = 1.01325 * bar; // 标准大气压

该const关键字不只是声明常数变量。您也可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以有一个常量值。

// Note: [] 创建一个空的list
// const [] 创建一个空的, 一成不变的list (简写为EIL).
var foo = const []; // foo 当前是一个 EIL(empty immutabe list).
final bar = const []; // bar 将永远是 EIL.
const baz = const []; // baz 是一个编译时常量 EIL.

// You can change the value of a non-final, non-const variable,
// even if it used to have a const value.
foo = [];

// You can't change the value of a final or const variable.
// bar = []; // Unhandled exception.
// baz = []; // Unhandled exception.

相关推荐