Dart语法-整体概述

本页内容告诉你如何使用 Dart 语言的主要特性,从变量到操作符、 从类到库,我们假定你在阅读本页内容之前已经 了解过其他编程语言了。

关于 Dart 核心库的更多内容,请参考 Dart 核心库预览。

注意: 下面所介绍的大部分特性都可以在 DartPad 中运行。

如果你需要了解语言特性的更详细的细节, 请查看 Dart 语言规范 。

A basic Dart program(一个最基本的 Dart 程序)

下面的代码使用了很多 Dart 中最基本的特性:

// 定义个方法。
printNumber(num aNumber) {
  print('The number is $aNumber.'); // 在控制台打印内容。
}

// 这是程序执行的入口。
main() {
  var number = 42; // 定义并初始化一个变量。
  printNumber(number); // 调用一个方法。
}

下面是上面代码中使用的一些可以应用到几乎所有 Dart 应用中的 特性:

// 这是一个注释。 使用 // 表示后面的文字都是注释。 另外,你还可以使用 /* … */ 。详情请参考: 注释。

num 一个类型。 String, int, 和 bool 是另外几种类型。

42 一个数字字面量。数字字面量是编译时常量。

print() 一种打印内容的助手方法。

’…’ (或者 “…”) 字符串字面量。

$variableName (or ${expression}) 字符串插值:在字符串字面量中引用变量或者表达式。 详情请参考: Strings。

main() Dart 程序执行的入口方法,每个程序都 需要 一个这样的方法。 详情请参考: main() 方法。

var 一种不指定类型声明变量的方式。

注意: 我们的代码准守 Dart 代码样式中的规则。 例如: 我们使用两个空格来缩进代码。

Important concepts(重要的概念)

在学习 Dart 的时候,请牢记下面一些事实和 概念:

  • 所有能够使用变量引用的都是对象, 每个对象都是一个类的实例。在 Dart 中 甚至连 数字、方法和 null 都是对象。所有的对象都继承于 Object 类。
  • 使用静态类型(例如前面示例中的 num ) 可以更清晰的表明你的意图,并且可以让静态分析工具来分析你的代码, 但这并不是牵制性的。(在调试代码的时候你可能注意到 没有指定类型的变量的类型为 dynamic。)
  • Dart 在运行之前会先解析你的代码。你可以通过使用 类型或者编译时常量来帮助 Dart 去捕获异常以及 让代码运行的更高效。
  • Dart 支持顶级方法 (例如 main()),同时还支持在类中定义函数。 (静态函数和实例函数)。 你还可以在方法中定义方法 (嵌套方法或者局部方法)。
  • 同样,Dart 还支持顶级变量,以及 在类中定义变量(静态变量和实例变量)。 实例变量有时候被称之为域(Fields)或者属性(Properties)。
  • 和 Java 不同的是,Dart 没有 public、 protected、 和 private 关键字。如果一个标识符以 (_) 开头,则该标识符 在库内是私有的。详情请参考: 库和可见性。
  • 标识符可以以字母或者 _ 下划线开头,后面可以是 其他字符和数字的组合。
  • 有时候 表达式 expression 和 语句 statement 是有区别的,所以这种情况我们会分别指明每种情况。
  • Dart 工具可以指出两种问题:警告和错误。 警告只是说你的代码可能有问题, 但是并不会阻止你的代码执行。 错误可以是编译时错误也可以是运行时错误。遇到编译时错误时,代码将 无法执行;运行时错误将会在运行代码的时候导致一个 异常。

Keywords(关键字)

下表为 Dart 语言的关键字。

abstract 1 continue false new this as 1 default final null throw assert deferred 1 finally operator 1 true async 2 do for part 1 try async* 2 dynamic 1 get 1 rethrow typedef 1 await 2 else if return var break enum implements 1 set 1 void case export 1 import 1 static 1 while catch external 1 in super with class extends is switch yield 2 const factory 1 library 1 sync* 2 yield* 2

  • 1. 带有上标 1 的关键字是 内置关键字。避免把内置关键字当做标识符使用。 也不要把内置关键字 用作类名字和类型名字。 有些内置关键字是为了方便把 JavaScript 代码移植到 Dart 而存在的。 例如,如果 JavaScript 代码中有个变量的名字为 factory, 在移植到 Dart 中的时候,你不必重新命名这个变量。
  • 2. 带有上标 2 的关键字,是在 Dart 1.0 发布以后又新加的,用于 支持异步相关的特性。 你不能在标记为 async、 async、或者 sync 的方法体内 使用 async、 await、或者 yield 作为标识符。 详情请参考:异步支持。

所以其他单词都是 保留词。 你不能用保留词作为关键字。