【问题标题】:Difference between var and other more specific types in dartvar 与 dart 中其他更具体的类型之间的区别
【发布时间】:2021-03-27 21:01:50
【问题描述】:

我来自 Javascript 的“let”,我对 var 和其他类型之间的最大区别有点困惑。我知道在某些情况下我们需要使用 var(匿名数据类型),而在某些情况下我们需要使用显式类型。我也明白 var 不够简洁,类型更多,但是在 Flutter 开发中使用类型而不是 var 是否有更深入或实际的应用?

【问题讨论】:

    标签: javascript flutter dart


    【解决方案1】:

    你永远不需要使用var;您始终可以选择指定显式类型。

    var 用于如果您想声明一个变量并希望类型是从初始化程序推断。 (如果没有初始化器,变量将是dynamic 类型。但是,由于dynamic 禁用对该变量的静态类型检查并产生额外的运行时成本,您should avoid dynamic when possible 并且应该明确地将变量作为dynamic 时这是必要的。

    如果变量类型是可推断的,那么使用隐式类型还是显式类型是风格问题。

    使用显式类型的优点:

    • 无需工具即可提高可读性(即,无需 IDE 支持来显示变量类型)。
    • 可以捕获推断类型不是预期类型的​​类型错误。

    使用隐式类型的优点:

    【讨论】:

      【解决方案2】:

      Dart 是一种静态类型语言,因此 Dart 需要能够在某个时候确定类型。但它也足够聪明,可以根据上下文自动确定类型。例如。函数返回值的类型。

      这确实是一个关于样式的问题,但我个人认为应该为方法签名和类变量指定类型。对于方法内的所有变量,我将使用 var/final 并使用明确的变量名。

      我尝试尽可能多地使用 var/final 的另一个原因是,这可以防止一些令人讨厌的问题,例如泛型(List list = <String>['test'] 使 list 变量成为 List<dynamic> 类型。

      dynamic 在 Dart 中实际上只是对编译器说“让它通过并检查程序在运行时是否有意义”。所以我们真的不想在我们的代码库中有太多dynamic,因为我们使用编译器的能力来静态检查你的程序是有意义的。

      【讨论】:

        【解决方案3】:

        你有

        • var 多重赋值和动态类型。 它可以从不同类型的表达式中分配。注意,Dart 会推断出正确的类型,只要你使用 var 时同时声明和初始化变量。

        • final 单人作业。 它通常用于在小部件类中声明属性。

        • const 编译时间常数。

        1. 用于定义硬编码值,例如颜色、字体大小和图标。
        2. 在定义小部件类时用作构造函数 const 作为构造函数,widget 被 Flutter 优化过,当 parent 改变时不会重新构建。

        尽可能选择 const 而不是 final。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-12
          • 2013-01-26
          • 2017-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多