美文网首页Flutterfullter
Flutter 中 Const,Static,Final 的巨大

Flutter 中 Const,Static,Final 的巨大

作者: 望穿秋水小作坊 | 来源:发表于2020-07-03 15:39 被阅读0次

    static , finalconst 在 Dart 中有着巨大的差别。

    核心: static 修饰 members , final 修饰 variables , const 修饰 value

    static

    static 意味着成员是类变量,而不是实例变量。仅此而已,没有其他任何用图。static 修饰 *成员(members)*

    final

    final 意味着单次赋值:一个 final 修饰的 变量或 字段 必须 具有初始化赋值。一旦赋值,final 的变量就不能改变。 final 修饰 *变量(variables)*

    const

    const 的含义在 Dart 中有一些复杂和微妙。const 修饰 *value*。 你可以用它创建于集合,例如 const [1,2,3],也可以构建一个类的实例,例如 const Point(2,3)。const 意味着这些对象的所有状态都在编译期就确定了,另外这个对象将会被冻结并且完全不可改变。

    Const 对象有一些有趣的属性和限制:

    1. 它们必须由编译期就能被计算出来的数据创建。一个 const 的对象不能使用运行时才能确定的值。1+2 是一个合法的 const 表达式,但是 new DateTime.now() 就是不合法的。

    2. 它们是深入的,传递性的不可改变。如果你有一个 final 的集合字段,集合里面的内容是可以改变的。如果你有一个 const 的集合对象,集合里面的一切都是 const 的,都是不能改变的。

    3. 它们是*规范化的*,这点有些像字符串:对于一个 const 的 value,无论这个 value 被创建或者使用多少次,都是相同的。举例如下:

    getConst() => cosnt[1,2];
    main(){
      var a = getConst();
      var b = getConst();
      print(a===b); // true
    }
    

    结语

    final:第一:如果你在运行时才能获得的值,那么用 final 进行修饰。比如 http 请求结果,数据库请求结果。第二:final 修饰的对象,只要这个对象的字段不是finalconst。那么他们是可以再次被赋值的。

    const:第一:编译期就能确定的值,那么用 final修饰。第二:如果你有一个 const 的对象,那么 const 对象里面的(字段)一切都是 const。不能再次进行赋值。

    参考资料:
    https://news.dartlang.org/2012/06/const-static-final-oh-my.html
    https://stackoverflow.com/questions/50431055/what-is-the-difference-between-the-const-and-final-keywords-in-dart

    相关文章

      网友评论

        本文标题:Flutter 中 Const,Static,Final 的巨大

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