美文网首页
Dart语言(一)重要的概念及变量定义

Dart语言(一)重要的概念及变量定义

作者: 免费的午餐 | 来源:发表于2019-03-30 13:22 被阅读0次

    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
    
    

    相关文章

      网友评论

          本文标题:Dart语言(一)重要的概念及变量定义

          本文链接:https://www.haomeiwen.com/subject/knmjbqtx.html