- 敲门笔记—>
T1、重要概念:
- 所有能够使用变量引用的都是对象, 每个对象都是一个类的实例。在 Dart 中 甚至连 数字、方法和
null
都是对象。所有的对象都继承于 Object类。
- 使用静态类型(例如前面示例中的
num
) 可以更清晰的表明你的意图,并且可以让静态分析工具来分析你的代码, 但这并不是牵制性的。(在调试代码的时候你可能注意到 没有指定类型的变量的类型为dynamic
。)
- Dart 在运行之前会先解析你的代码。你可以通过使用 类型或者编译时常量来帮助 Dart 去捕获异常以及 让代码运行的更高效。
- Dart 支持顶级方法 (例如
main()
),同时还支持在类中定义函数。 (静态函数和实例函数)。 你还可以在方法中定义方法 (嵌套方法或者局部方法)。
- 同样,Dart 还支持顶级变量,以及 在类中定义变量(静态变量和实例变量)。 实例变量有时候被称之为域(
Fields
)或者属性(Properties
)。
- 和 Java 不同的是,Dart 没有
public
、protected
、 和private
关键字。如果一个标识符以 (_) 开头,则该标识符 在库内是私有的。详情请参考: 库和可见性。
- 标识符可以以字母或者 _ 下划线开头,后面可以是 其他字符和数字的组合。
- 有时候 表达式 expression 和 语句 statement 是有区别的,所以这种情况我们会分别指明每种情况。
- Dart 工具可以指出两种问题:警告和错误。 警告只是说你的代码可能有问题, 但是并不会阻止你的代码执行。 错误可以是编译时错误也可以是运行时错误。遇到编译时错误时,代码将 无法执行;运行时错误将会在运行代码的时候导致一个 异常。
T2、Keywords(关键字):
key-
1 带有上标 1 的关键字是 内置关键字。避免把内置关键字当做标识符使用。 也不要把内置关键字 用作类名字和类型名字。 有些内置关键字是为了方便把 JavaScript 代码移植到 Dart 而存在的。 例如,如果 JavaScript 代码中有个变量的名字为 factory, 在移植到 Dart 中的时候,你不必重新命名这个变量。
-
2 带有上标 2 的关键字,是在 Dart 1.0 发布以后又新加的,用于 支持异步相关的特性。 你不能在标记为
async
、async*
、或者sync*
的方法体内 使用async
、await
、或者yield
作为标识符。 详情请参考:异步支持。
- 所以其他单词都是 保留词。 你不能用保留词作为关键字。
T3、Variables(变量):
var name = 'Bob';
- 变量是一个引用。上面名字为
name
的变量引用了 一个内容为 “Bob” 的 String 对象。
T4、Default value(默认值):
- 没有初始化的变量自动获取一个默认值为 null。类型为数字的 变量如何没有初始化其值也是 null,不要忘记了 数字类型也是对象。
int lineCount;
assert(lineCount == null);
// Variables (even if they will be numbers) are initially null.
注意: 在生产模式 assert()
语句被忽略了。在检查模式 assert(*condition*)
会执行,如果条件不为 true 则会抛出一个异常。详情请参考 Assert部分。
T5、Optional types(可选的类型):
- 在声明变量的时候,你可以选择加上具体 类型:
String name = 'Bob';
- 添加类型可以更加清晰的表达你的意图。 IDE 编译器等工具有可以使用类型来更好的帮助你, 可以提供代码补全、提前发现 bug 等功能。
注意: 对于局部变量,这里准守 代码风格推荐 部分的建议,使用 var
而不是具体的类型来定义局部变量。
T6、Final and const:
- 如果你以后不打算修改一个变量,使用
final
或者const
。 一个final
变量只能赋值一次;一个const
变量是编译时常量。 (Const
变量同时也是final
变量。) 顶级的 final 变量或者类中的final
变量在 第一次使用的时候初始化。
注意: 实例变量可以为 final 但是不能是 const 。
- 下面是 final 变量的示例:
final name = 'Bob'; // Or: final String name = 'Bob';
// name = 'Alice'; // Uncommenting this causes an error
- const 变量为编译时常量。 如果 const 变量在类中,请定义为 static const。 可以直接定义 const 和其值,也 可以定义一个 const 变量使用其他 const 变量的值来初始化其值。
const bar = 1000000; // Unit of pressure (dynes/cm2)
const atm = 1.01325 * bar; // Standard atmosphere
- const 关键字不仅仅只用来定义常量。 有可以用来创建不变的值, 还能定义构造函数为 const 类型的,这种类型 的构造函数创建的对象是不可改变的。任何变量都可以有一个不变的值。
// Note: [] creates an empty list.
// const [] creates an empty, immutable list (EIA).
var foo = const []; // foo is currently an EIA.
final bar = const []; // bar will always be an EIA.
const baz = const []; // baz is a compile-time constant EIA.
// 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.
- 直接查看 po出的链接了解更多。
网友评论