Dart语言(一)重要的概念
在学习Dart的时候,我们需要牢记一些事实和概念:
- 所有能够使用变量引用的都是对象,每个对象都是一个类的实例。在Dart中甚至连数字、方法和null都是对象。所有的对象都继承于Object类。
- Dart在运行之前会先解析代码。我们可以通过使用类型或编译时常量帮助Dart去捕获异常。
- Dart支持顶级方法(如main()),同时还支持在类中定义函数(静态函数和实例函数)。你还可以在方法中定义方法(嵌套方法或者局部方法)。
- Dart还支持顶级变量,以及在类中定义变量(静态和实例变量)。实例变量有时候被称之为域Fields或者属性Properties。
- 和Java不同的是,Dart没有public、protected和private关键字。如果一个标识符以(_)开头,也就是下横杠开头,则该标识符在库内是私有的。使用 import 和 library 指令可以帮助你创建 模块化的可分享的代码。库不仅仅提供 API, 还是一个私有单元:以下划线 ( _ ) 开头的标识符只有在库 内部可见。每个 Dart app 都是一个库, 即使没有使用 library 命令也是一个库。
- 标识符可以以字母或者_下划线开头,后面可以是其他字符和数字的组合。
- 有时候表达式expression和语句statement是有区别的,所以这种情况我们会分别指明每种情况。
- Dart工具可以指出两种问题:警告和错误。警告只是说你的代码可能有问题,但是并不会阻止你的代码执行。错误可以是编译时错误也可以是运行时错误。遇到编译时错误时,代码将无法执行;运行时错误将会在运行代码的时候导致一个异常。
keywords关键字
Dart语言的关键字列表:
abstract | continue | false | new | this |
---|---|---|---|---|
as | default | final | null | throw |
assert | deferred | finally | operator | true |
async | do | for | part | try |
async* | dynamic | get | rethrow | typedef |
await | else | if | return | var |
break | enum | implements | set | void |
case | export | import | static | while |
catch | external | in | super | with |
class | extends | is | switch | yield |
const | factory | library | sync* | yield* |
abstract、as、deferred、operator、partdynamic、gettypedef、implements、set、export、import、static、external、factory、library这些是关键字是内置关键字。不要把内置关键字当做标识符使用。也不要把内置关键字用作类名字和类型名字。有些内置关键字是为了方便吧JavaScript代码移植到Dart中而存在的。例如,如果JavaScript代码中有个变量的名字为factory,在移植到Dart中的时候,不必重新命名这个变量。
async、async* 、await、sync* 、yield* 这些是在Dart1.0发布以后新加的,用于支持异步操作相关的特性。我们不能在async、async* 或者sync* 的方法体内使用async、await或者yield作为标识符。
所有其他的单词都是保留词,不能用作关键字。
变量的定义variable
dart声明变量并赋值示例:
var name='Bob';
变量是一个引用,上面名字为name的变量引用了一个内容为"Bob"的String对象。
变量的默认值default value
没有初始化的变量自动获取一个默认值为null。类型为数字的变量如果没有初始化那么默认值也是null,因为数字类型也是对象。
int lineCount;
assert(lineCount==null)
注意:在生产模式assert()语句被忽略。在检查模式assert(condition)会执行,如果条件不为true,则会抛出一个异常。
变量类型可选Optional types
在声明变量的时候,可以选择加上具体类型:
//
String name='Bob';
添加类型可以更加清晰的表达出我们的意图。IDE编译器等工具有可以更好的帮助我们,代码补全、提前发现bug等。
注意:对于局部变量,我们准守代码风格推荐的建议,使用var 而不是具体的类型来定义局部变量。
final和const
dart中的final和java中的final关键字是一样的。如果不打算修改一个变量,那么使用final或者const。一个final修饰的变量只能赋值一次;一个const变量是编译时变量。Const变量同时也是final变量。顶级的final变量或者类中的final变量在第一次使用的时候初始化。
注意:实例变量可以为final 但不能是 const。
final变量示例:
final name = 'Bob';
const变量为编译时常量。如果const变量在类中,请定义为static const。可以直接定义const和其值,也可以定义一个const变量使用其他的const变量的值来初始化其值。
const变量示例:
const bar = 10000;
const atm = 10*bar;
const关键字不仅仅只用来定义常量。还可以用来创建变的值,还能定义构造函数为const类型,这种类型的构造函数创建的对象是不可改变的。任何变量都可以有一个不变的值。
//创建空的集合
var foo = const [];//普通foo变量指向一个集合
final bar = const [];//bar 指向不可变
const baz = const [];//编译时的baz 同时具备final特性
//我们可以改变一个不是final或const修饰的变量
foo = [];
//我们不能改变被final或者const修饰过的变量
bar = [];//会报异常Unhandled Exception
baz = [];//会报异常Unhandled Exception
网友评论