编程语言
917
一个基本的 Dart 程序
下面的代码使用了 Dart 的许多基本特性:
// 定义函数 printInteger(int aNumber) { print('The number is $aNumber.'); // 打印到控制台 } // 这里是程序开始执行的地方 main() { var number = 42; // 定义并初始化变量 printInteger(number); // 调用函数 }
下面是这个程序使用的可适用于所有 (almost) Dart 应用的特性:
// 这是一个单行注释
一个单行注释。Dart 也支持多行和文档注释。详情请参阅 注释。
int
一个类型。其他的一些 内置类型 包括字符串、List 和布尔。
42
一个数值字面量。数值字面量是一种编译期常量。
print()
一个方便的展示输出方式。
'...' (or "...")
一个字符串字面量。
$variableName (or ${expression})
字符串插值:插入一个变量或者表达式的字符串值到一个字符串字面量里。详情请参阅 字符串。
main()
应用开始执行的特定的、必须的、顶级的函数。
var
一种声明变量但是不指定类型的方法。
说明:本篇文章的代码遵从 Dart 风格指南 中的公约。
重要概念
当你学习 Dart 语言的时候,请记住以下事实和概念:
- 所有可以放在一个变量里面的东西都是对象,而且所有对象都是类的实例。每一个数值、函数和 null 都是对象。所有的对象都继承自 Object 类。
- 尽管 Dart 是强类型的,但是 Dart 支持类型推断所以类型声明是可选的。在上面的代码中,number 被推断为类型 int。当你想要显式声明没有预期的类型时,使用特殊的 dynamic 类型。
- Dart 支持泛型,像是 **List<int>**(包含整数的列表)或者 **List<dynamic>**(一个包含任意类型对象的列表)。
- 除了绑定在类和对象上的函数(分别为静态方法和实例方法)以外,Dart 还支持顶级函数(像 main())。你还可以在函数中创建函数(嵌套函数或局部函数)。
- 不像 Java,Dart 没有这些关键词:pubilc,protected,private。如果一个标识符以下划线 (_) 开头,那么对于它的库来说是私有的。
- 标识符可以以下划线 (_) 开头,后面跟上任意字母和数字的组合。
- Dart 既有“表达式”(具有运行时的值)也有“语句”(没有运行时的值)。condition ? expr1 : expr2 有 expr1 或 expr2 的值。相对的一个 if-else 语句,是没有值的。一个语句经常包含一个或多个表达式,但是一个表达式不能直接包含一个语句。
- Dart 开发工具会报告两种类型的问题:"警告"和"错误"。警告只是表明你的代码可能无法正常工作,但是并不会禁止你执行程序。错误可能是编译期或者运行期的。一个编译期错误完全禁止程序的执行;而运行期错误会在代码执行到这里时抛出一个 异常
关键词
下面的表格列出了 Dart 语言特殊对待的关键词。
abstract 2 | dynamic 2 | implements 2 | show 1 |
---|---|---|---|
as 2 | else | import 2 | static 2 |
assert | enum | in | super |
async 1 | export 2 | interface 2 | switch |
await 3 | extends | is | sync 1 |
break | external 2 | library 2 | this |
case | factory 2 | mixin 2 | throw |
catch | false | new | true |
class | final | null | try |
const | finally | on 1 | typedef 2 |
continue | for | operator 2 | var |
covariant 2 | Function 2 | part 2 | void |
default | get 2 | rethrow | while |
deferred 2 | hide 1 | return | with |
do | if | set 2 | yield 3 |
避免使用这些单词作为标识符。然而,如果必要,带角标的关键词可以作为标识符:
- 带角标 1 的是 上下文关键词,它们只在特定的地方有有意义。除此之外他们在所有地方都是合法的关键词。
- 带角标 2 的是 内置标识符。为了简化将JavaScript代码移植到Dart的任务,这些关键字在大多数地方都是有效的标识符,但它们不能用作类或类型名称,也不能用作导入前缀。
- 带角标 3 的是新的,与 [异步支持](# 异步支持) 相关的限制性关键词,在 Dart 1.0 发布后才被加入。在以 async、async* 或 yield 标识的函数体中,你不能使用 async、await 或者 yield 作为标识符。
关键词表里的其他所有单词都是保留词。你不能使用它们作为标识符。