在 dart 中将 `const` 值赋给 `final` 变量的目的是什么? [复制]

2024-01-09

所以我正在做第一个例子 https://flutter.io/get-started/codelab/对于 Flutter,以及以下 步骤4:创建无限滚动的ListView,

我遇到了这段代码:

class RandomWordsState extends State<RandomWords> {
  final _suggestions = <WordPair>[];

  final _biggerFont = const TextStyle(fontSize: 18.0);
  ...
} 

但我发现下面这行有点诡异。

final _biggerFont = const TextStyle(fontSize: 18.0);

我的问题是,分配一个的目的是什么?const蚂蚁价值final多变的?

我知道

编译时常量被规范化,即无论多少次 你写const MyObj(0, 0),你只创建一个对象。

这听起来可能很有用,但您可以简单地创建 const 变量来保存该值并使用该变量。

嗯,你不觉得这有点多余吗?我知道 Flutter 的开发人员想要创建一个编译时常量对象,但是嘿!您正在将该值分配给final多变的。这在某种程度上是同一件事。

有什么想法吗?

UPDATE

我用谷歌搜索了一些定义,我发现

const构造函数不能有主体并且它的类不能有 任何非最终字段

这就是我们使用const关键词?因为如果你看看TextStyle https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/painting/text_style.dart类的设计,你会发现他们在这里做了完全相同的事情。


我个人认为

final _biggerFont = const TextStyle(fontSize: 18.0);

看起来像是一个错误,仅此一点就足以改变它。

该成员仅在同一个类内部使用,因此没有理由不使用它static。这样就不会为该类的每个实例占用一个额外的内存位置,所有实例都指向同一个值。 (假设编译器无法识别该字段始终具有相同的值,并且只是在各处内联该值)。

如果该会员是static,也可能是const,所以我将其写为:

static const _biggerFont = TextStyle(fontSize: 18.0);

这假设代码是我通过搜索找到的final _biggerFont = const.

如果同一个库中有一个子类覆盖_biggerFont,那么它确实需要是一个实例变量。它仍然可能是一个getter那么,而不是一个字段。这是否能提高效率取决于类的使用方式,以及编译器对始终具有相同值的 Final 字段的优化程度。

无论如何,创建一个始终具有相同常量值的私有实例成员看起来应该只是一个静态常量,并且看起来像错误的代码很难阅读。出于这个原因,我会重写它(或记录它) - 以避免读者对为什么它是这样感到困惑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 dart 中将 `const` 值赋给 `final` 变量的目的是什么? [复制] 的相关文章

随机推荐

  • 数据表添加到数据集

    我需要为数据集设置一个表 DataSet ds EventDal GetEvents DataSet dsReturn new DataSet DataTable dtReturn dsReturn Tables Add dtReturn
  • 子域 Azure WebApp

    这是一个更普遍的问题 我有一个作为 Azure 应用服务运行的网站 我配置了一个自定义域 以便您可以通过以下方式调用它我的网站名称 com 随着客户的要求不断增长 每个客户都有特定的需求 我想知道是否可以为每个客户拥有一个子域 例如 cli
  • pandas + pyodbc ODBC SQL 类型 -150 尚不支持

    我知道这方面有很多主题 但我认为这是非常具体的 我得到用于审计目的的当前代码 import pandas as pd import pyodbc query Top 50 high total CPU Queries SELECT TOP
  • 在 nginx 上为应用程序添加上下文路径

    Nginx 负责从根目录到根 URL 的所有静态内容 例如 如果根内容位置配置为 usr share nginx html其中包含一个文件 usr share nginx html foo html 然后是网址http localhost
  • Zope 冲突错误

    我的网站的 zope 日志报告了许多冲突错误 平均每天120个 其中2 3个未解决 我读过很多关于为什么会发生冲突错误的文章 但没有什么是清楚的 大多数冲突错误发生在对 MySQL 数据库运行选择查询的页面上 据称 随着 http 请求并发
  • 开始 Lua 脚本编写 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正处于被迫学习Lua的阶段 所以你对我如何做到这一点有什么建议吗 除了 PHP 之外 我对其他脚本语言没有太多经验 那么 关于 head
  • django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。 (django 2.0.1)(Python 3.6)

    这是我第一次尝试将 Django 应用程序 django 2 0 1 Python 3 6 部署到 pythonanywhere 它是一个简单的组合应用程序 没有模型 没有引导程序 只需 Django HTML CSS 和 JavaScri
  • 将 prop 传递给样式组件

    我正在尝试找到一种方法来动态创建 居中此 div 组件 这段代码目前可以工作 但有点冗长而且不是很干 const Rel styled div position relative height 100 width 100 const Abs
  • iOS:根据加速度计输出准确确定碰撞能量

    我正在创建一个音叉应用程序 您可以将 iPhone 轻拍到另一只手的手掌上 或者轻拍到柔软的表面上 以设置音叉的声音 所以我想检测每个 凹凸 中包含的能量 编辑 删除了大量的gumpf 谁能帮我破解这个吗 感谢 freenode 的 mat
  • Python 中与 finditer() 的重叠匹配

    我正在使用正则表达式来匹配文本中的圣经经文引用 当前的正则表达式是 REF REGEX re compile q uote s Match optional q or quote followed by many spaces P
  • 如何在 iOS 和 Android 应用程序的 React Native 中禁用字体缩放?

    设备字体大小的放大有时会中断 样式方面 禁用字体缩放可能会损害应用程序的可访问性 理想情况下 如果您想限制使用 React Native 0 58 0 及更高版本的应用程序的缩放 使用maxFontSizeMultiplier prop h
  • HTTP 请求被视为超时的默认时间是多少?

    对于 PHP HTTP 请求被视为超时的默认时间是多少 我正在使用 PECL HTTP 扩展来发出 HTTP 请求 我可以在发出请求时设置超时限制 但是我想知道如果没有明确指定任何内容 默认值是什么 我查遍了 PHP 手册 但没有结果 我希
  • 在android中以编程方式创建vCard文件

    我使用以下代码来读取联系人并创建 vcard 文件 String lookupKey cur getString cur getColumnIndex Contacts LOOKUP KEY Uri uri Uri withAppended
  • TextInputEditText 无法转换为 TextInputLayout

    我的活动中有此代码 public class RegisterActivity extends AppCompatActivity private static final String TAG RegisterActivity class
  • 如何删除composer php中的所有测试?

    我是作曲家开发方面的新手 我刚刚开始在当前的项目中与作曲家合作 我认为我的问题之前已经被问过 或者我对作曲家很菜鸟 D 每个依赖项的供应商中有许多测试文件和目录 我只想在将其上传到服务器之前删除这些测试 是否有任何命令可以删除这些测试或者我
  • 找到第二个最接近值的索引

    我在用 index np abs array value argmin 查找数组中与某个值的绝对差值最小的索引 但是 有没有像这样的干净方法来查找second最接近该值的索引 我认为这有效 a np linspace 0 10 30 arr
  • 在 Ruby 中解析文件时跳过行的最快方法?

    我尝试寻找这个 但找不到太多 这似乎是以前可能被问过的问题 很多次 所以如果是这样的话 我深表歉意 我想知道在 Ruby 中解析文件某些部分的最快方法是什么 例如 假设我know我想要的特定函数的信息位于 1000 行文件的第 500 行和
  • 从 URL 中提取主机名

    我必须在 sql 中将网站名称修剪为 com 或 co in 示例 假设我的站点地址为 http stackoverflow com questions ask title trim 我需要得到 stackoverflow com 的结果
  • 使用 JLabels 更新图像的正确方法

    我正在创建一个 GUI 并且对 swing 和 awt 相当陌生 我正在尝试创建一个 gui 在启动时将背景设置为图像 然后使用一种方法来创建某种幻灯片 我已经尝试过 并且我不执着于代码 因此我能够接受修订和 或全新概念 编辑 9 15 1
  • 在 dart 中将 `const` 值赋给 `final` 变量的目的是什么? [复制]

    这个问题在这里已经有答案了 所以我正在做第一个例子 https flutter io get started codelab 对于 Flutter 以及以下 步骤4 创建无限滚动的ListView 我遇到了这段代码 class Random