基本概念 3个月前

编程语言
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 没有这些关键词:pubilcprotectedprivate。如果一个标识符以下划线 (_) 开头,那么对于它的库来说是私有的。
  • 标识符可以以下划线 (_) 开头,后面跟上任意字母和数字的组合。
  • Dart 既有“表达式”(具有运行时的值)也有“语句”(没有运行时的值)。condition ? expr1 : expr2expr1expr2 的值。相对的一个 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 发布后才被加入。在以 asyncasync*yield 标识的函数体中,你不能使用 asyncawait 或者 yield 作为标识符。

关键词表里的其他所有单词都是保留词。你不能使用它们作为标识符。

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2222686
累计阅读

热门教程文档

Docker
62小节
Maven
5小节
Golang
23小节
Linux
51小节
爬虫
6小节