当前位置: 首页 > news >正文

旅游网站400电话彩铃正规的关键词优化软件

旅游网站400电话彩铃,正规的关键词优化软件,手机企业网站制作,厦门疫情最新消息今天封城了const keyword 首先需要知道 const 和 final 是对立关系, 都是用来声明常量的 在 Flutter(Dart 语言) 中,const 是一个编译时常量关键字,其作用不仅是声明不可变变量,还能在内存和性能优化中发挥关键作用。 &#x1…

const keyword

首先需要知道 constfinal 是对立关系, 都是用来声明常量的

Flutter(Dart 语言) 中,const 是一个编译时常量关键字,其作用不仅是声明不可变变量,还能在内存和性能优化中发挥关键作用。


🎯 核心作用

1️⃣ 编译时确定的值

  • const 修饰的变量或对象必须在编译时就能计算出结果,无法依赖运行时的数据。
  • 示例:
    const PI = 3.14159;                  // ✅ 合法
    const currentTime = DateTime.now();  // ❌ 非法(运行时才能确定)
    

2️⃣ 深度不可变

  • 变量本身和所有嵌套属性不可变:
    const list = [1, 2, 3];
    list.add(4);  // ❌ 运行时抛出异常
    

3️⃣ 内存优化

  • 相同值的 const 对象共享同一内存地址
    var a = const [1, 2];
    var b = const [1, 2];
    print(identical(a, b)); // ✅ 输出 true(内存地址相同)
    

在 Flutter 中的应用场景

📌 1. 提高 Widget 性能

Flutter 会跳过重建 const Widget(因其不可变):

// 推荐写法:对静态无状态的子 Widget 使用 const
class MyPage extends StatelessWidget {Widget build(BuildContext context) {return Column(children: [const Text("Hello"),  // ✅ 重建时会被复用const SizedBox(height: 10),],);}
}

📌 2. 定义全局常量

  • 跨组件共享的配置:
    const kDefaultPadding = 16.0;
    const kPrimaryColor = Color(0xFF4285F4);
    

📌 3. 优化集合类型

  • 使用 const 创建不可变集合:
    const validStatusCodes = {200, 304}; // 不可变的 Set
    const translations = {'en': 'Hello', 'es': 'Hola'}; // 不可变的 Map
    

⚠️ final 的关键区别

特性constfinal
赋值时机编译时运行时(但只赋值一次)
内存占用共享相同值每次创建新实例
集合内部可变性完全不可变(递归)变量引用不可变,但对象内部可修改

示例对比

// const:完全冻结
const constList = [1, 2];
// constList.add(3);  // ❌ 报错// final:仅禁止重新赋值
final finalList = [1, 2];
finalList.add(3);      // ✅ 允许修改内容
// finalList = [4, 5]; // ❌ 禁止重新赋值

📌 最佳实践

  1. Widget 优化

    // ✅ 好的写法:尽可能对静态子 Widget 使用 const
    Scaffold(body: const Center(child: const Text('优化性能'),),
    );// ❌ 避免:无谓的重复构建
    Scaffold(body: Center(child: Text('每次重建'), // 非 const 导致重复创建),
    );
    
  2. 集合常量

    // 使用 const 构造器创建不可变集合
    var list = const []; // 等同于 List.unmodifiable([])
    
  3. 构造函数标记

    // 如果类可能被 const 构造,显式声明 const 构造函数
    class Point {final double x, y;const Point(this.x, this.y); // ▶️ 可被 const 调用
    }
    

🌰 性能影响实测

以下代码在 Flutter 性能测试 中差异明显:

// 测试1:非 const Widget(构建耗时较长)
ListView.builder(itemBuilder: (_, index) => Text('Item $index'),
);// 测试2:const Widget(构建速度提升 20%-40%)
ListView.builder(itemBuilder: (_, index) => const Text('Item'), 
);

常见误区

  • 误区1:认为 const 只在编译期有用
    → 实际在运行时也会优化内存(共享实例)。
  • 误区2:滥用 const 导致代码可读性下降
    → 权衡可维护性和性能,避免过度优化。

通过合理使用 const,可以显著提升 Flutter 应用的性能和内存效率,尤其是在复杂 Widget 树场景下。

番外:static 是否需要?

Dart/Flutter 中为类定义静态常量时,推荐使用 static const,而非仅用 static。以下是详细对比和最佳实践:


🔍 核心区别对比

特性static const intstatic int (非 const)
不可变性✅ 编译时常量,完全不可变❌ 变量可被重新赋值(即使不推荐)
内存优化✅ 全局共享同一内存地址❌ 每次访问都是独立值
使用场景定义真正的常量(如配置、枚举值)需要运行时修改的静态变量
线程安全✅ 天然线程安全❌ 需手动控制同步

🎯 为什么推荐 static const

1️⃣ 语义明确

  • static const 清晰表达“这是不可变的常量”:
    class Config {static const int maxRetryCount = 3;  // ✅ 明确表示不可修改static int timeout = 5000;          // ❓ 可能被意外修改(易引发 bug)
    }
    

2️⃣ 性能优势

  • const 常量在编译时被内联,运行时无额外内存开销:
    // 编译后直接替换为字面量
    print(Config.maxRetryCount);  // 等效于 print(3);
    

3️⃣ 避免意外修改

  • conststatic 变量可能被错误地修改:
    Config.timeout = -1;  // 编译通过,但逻辑错误!
    Config.maxRetryCount = 5;  // ❌ 编译时报错(安全)
    

📌 使用建议

✅ 优先 static const 的场景

  • 枚举值、状态码、配置参数等绝对常量
    class HttpStatus {static const int success = 200;static const int notFound = 404;
    }
    

⚠️ 谨慎使用 static int(无 const)的场景

  • 需要在运行时动态调整的全局变量(如缓存大小):
    class AppCache {static int maxSize = 100;  // 允许运行时修改static void updateCacheSize(int size) => maxSize = size;
    }
    

🌰 实际代码示例

1. 定义路由名称常量(推荐 const

class AppRoutes {static const String home = '/home';static const String profile = '/profile';
}// 使用时直接内联,无运行时开销
Navigator.pushNamed(context, AppRoutes.home);

2. 需要运行时修改的计数器(用非 const

class Counter {static int globalCount = 0;  // 需要修改,不能用 conststatic void increment() => globalCount++;
}

⚠️ 常见问题

Q:static finalstatic const 如何选?

  • 相同点:均不可变
  • 不同点:
    • const:必须编译时确定值(如数字、字符串字面量)
    • final:允许运行时赋值一次(如从函数计算结果)
    class MathConstants {static const double pi = 3.14159;  // ✅ 编译时已知static final double random = Random().nextDouble();  // 运行时确定
    }
    

Q:为什么 Dart 不默认所有 staticconst

  • 设计哲学:显式声明优于隐式行为,避免开发者误用常量导致灵活性丧失。

📊 性能对比测试

// 测试代码:重复访问 10 万次
class Test {static const int constValue = 42;static int mutableValue = 42;
}void benchmark() {final stopwatch = Stopwatch()..start();for (var i = 0; i < 100000; i++) {Test.constValue;  // 0.2ms (编译时内联)}print('const: ${stopwatch.elapsedMicroseconds}μs');stopwatch.reset();for (var i = 0; i < 100000; i++) {Test.mutableValue;  // 1.8ms (需内存访问)}print('non-const: ${stopwatch.elapsedMicroseconds}μs');
}

结果const 访问速度快 5-10 倍(实际差异随场景变化)。


终极总结

关键字推荐场景
static const绝对常量(配置、枚举、数学常数等)
static final运行时确定但不可变的量(如初始化后的全局配置)
static需要运行时修改的静态变量(慎用!确保线程安全或加锁)

黄金法则

能用 const 就优先用 const,除非必须允许修改。

番外2:自动类型判断

class Square {static int sides = 4;
}class Circle {// 这里其实dart规范写成 pi 就行/*可以加上 double但是不加也是可以正常运行的上面的 sides 不带 const 所以需要带上 int*/static const PI = 3.14;
}

在 Dart 中,static conststatic 变量在类型推断上的行为差异,源于 Dart 的类型系统设计const 常量的特殊性。以下是具体原因和背后机制:


🧠 根本原因

1️⃣ const 常量的类型推断规则

  • const 声明的常量 拥有 更强大的类型推断能力
    Dart 编译器在处理 const 时会 根据右侧的初始值自动推断类型,因此允许省略类型声明。
    static const PI = 3.14;  // 自动推断为 `double` 类型
    static const name = "Flutter";  // 自动推断为 `String` 类型
    
    • 因为 const 的值必须在编译时确定,编译器可以安全地推断出类型。

2️⃣ const 静态变量的限制

  • 普通的 static 变量 默认不会自动推断类型(即类型是可选的,但如果不初始化必须指定类型)
    Dart 要求静态变量 要么有类型注解,要么有初始值(以便推断类型):
    static int sides = 4;   // ✅ 明确指定类型(推荐)
    static sides = 4;       // ✅ 也行(编译器推断为 `int`)
    static int sides;       // ❌ 不初始化时必须指定类型(否则 `dynamic`)
    
    ⚠️ 关键点
    • 如果省略 int,它依然是 100% 合法的 Dart 代码(Dart 2.x 开始支持局部变量类型推断)。
    • 但某些代码风格工具(如 lints 规则)或 IDE 可能会 建议显式声明类型(以避免隐式 dynamic 或提高代码可读性)。

📌 Dart 官方风格指南的建议

推荐做法

  1. 对于 const 常量

    • 可省略类型(代码更简洁,Dart SDK 也大量使用该风格):
      static const defaultTimeout = 1000;  // 推断为 `int`
      
  2. 对于 static 可变变量

    • 更推荐显式声明类型(提高可读性和维护性):
      static int maxConnections = 10;  // 而不仅是 `static maxConnections = 10;`
      
  3. final 变量的场景

    • static final 变量也会自动推断类型:
      static final currentTime = DateTime.now();  // 自动推断为 `DateTime`
      

🔍 底层机制

为什么 const 可以省略类型?

  1. 编译时常量的特性

    • 在编译期间,任何 const 表达式都会被计算并内联到代码中,Dart 能 100% 确定其类型。
  2. 避免 dynamic 风险

    • 因为 const 值无法修改,类型推断是绝对安全的。

为什么非 const 静态变量建议显式类型?

  1. 降低 dynamic 的意外使用

    • 如果没有初始化或类型注解,Dart 会推断为 dynamic,可能引发运行时错误:
      static var uninitialized;  // 类型是 `dynamic`(危险!)
      
  2. 代码可维护性

    • 显式类型让代码意图更清晰,方便团队协作。

🌰 代码示例

正确且推荐

class Math {static const PI = 3.14;  // 推断为 `double`
}

➡️ 编译后完全等同于:

static const double PI = 3.14;

💡 总结

场景类型声明建议示例
static const可省略(自动推断)static const PI = 3.14;
static 变量推荐显式声明(避免隐含 dynamicstatic int sides = 4;
final 变量可省略static final now = DateTime.now();

黄金法则

  • 对于常量(const/final → 类型可省,代码更简洁。
    *类型不够明显需要特定的类型代码可读性需要,建议 显示写明类型
  • 对于可变静态变量 → 显式声明类型,提高健壮性。

文章转载自:
http://dinncoallotee.bkqw.cn
http://dinncoschnockered.bkqw.cn
http://dinncoinvalid.bkqw.cn
http://dinncoaeroneer.bkqw.cn
http://dinncoambroid.bkqw.cn
http://dinncoorthopaedy.bkqw.cn
http://dinncopteridophyte.bkqw.cn
http://dinncoichthyoacanthotoxism.bkqw.cn
http://dinncosidebar.bkqw.cn
http://dinncotruncation.bkqw.cn
http://dinncostilly.bkqw.cn
http://dinncobeddo.bkqw.cn
http://dinncomolality.bkqw.cn
http://dinncosaseno.bkqw.cn
http://dinncograsshopper.bkqw.cn
http://dinncoconcoction.bkqw.cn
http://dinncocriminalistic.bkqw.cn
http://dinncofanaticize.bkqw.cn
http://dinncoanyone.bkqw.cn
http://dinncochicalote.bkqw.cn
http://dinncothomasine.bkqw.cn
http://dinncoaileen.bkqw.cn
http://dinnconinepenny.bkqw.cn
http://dinncoigmp.bkqw.cn
http://dinncoovercredulous.bkqw.cn
http://dinncohistoricism.bkqw.cn
http://dinncoabscessed.bkqw.cn
http://dinncoheishe.bkqw.cn
http://dinncohowsoever.bkqw.cn
http://dinncolatex.bkqw.cn
http://dinncosupertype.bkqw.cn
http://dinncovariegate.bkqw.cn
http://dinncoacceleratory.bkqw.cn
http://dinncocockeyed.bkqw.cn
http://dinncoobliquitous.bkqw.cn
http://dinncophilanthropic.bkqw.cn
http://dinncotufthunter.bkqw.cn
http://dinnconormoblast.bkqw.cn
http://dinncoabsinthine.bkqw.cn
http://dinncolagos.bkqw.cn
http://dinncocarpetnetter.bkqw.cn
http://dinncoarchaeozoic.bkqw.cn
http://dinncoplumbaginaceous.bkqw.cn
http://dinncoantiquarian.bkqw.cn
http://dinncocerebel.bkqw.cn
http://dinncoresourcefully.bkqw.cn
http://dinncozigzagged.bkqw.cn
http://dinncosuperb.bkqw.cn
http://dinncoscurfy.bkqw.cn
http://dinncoposb.bkqw.cn
http://dinncofete.bkqw.cn
http://dinncoptyalectasis.bkqw.cn
http://dinncourgency.bkqw.cn
http://dinncorevulsive.bkqw.cn
http://dinncoirredentist.bkqw.cn
http://dinncozymoplastic.bkqw.cn
http://dinncocoriolanus.bkqw.cn
http://dinncorode.bkqw.cn
http://dinncoemphasize.bkqw.cn
http://dinncodubiety.bkqw.cn
http://dinncomailplane.bkqw.cn
http://dinncoaiblins.bkqw.cn
http://dinncolocalitis.bkqw.cn
http://dinncoextracondensed.bkqw.cn
http://dinncofluviograph.bkqw.cn
http://dinncofanwise.bkqw.cn
http://dinncopsychosomimetic.bkqw.cn
http://dinncoretentively.bkqw.cn
http://dinncoretrainee.bkqw.cn
http://dinncoslope.bkqw.cn
http://dinncoroomie.bkqw.cn
http://dinncopinspotter.bkqw.cn
http://dinncofabricant.bkqw.cn
http://dinncoclaudine.bkqw.cn
http://dinncolanolated.bkqw.cn
http://dinncoeclat.bkqw.cn
http://dinncosiphonaceous.bkqw.cn
http://dinncoknown.bkqw.cn
http://dinncodipartite.bkqw.cn
http://dinncostopgap.bkqw.cn
http://dinncoseedcake.bkqw.cn
http://dinncojaculate.bkqw.cn
http://dinncowhatso.bkqw.cn
http://dinncofamilarity.bkqw.cn
http://dinncopollan.bkqw.cn
http://dinncoperistaltic.bkqw.cn
http://dinncogoaltender.bkqw.cn
http://dinncoreconnoiter.bkqw.cn
http://dinncogettable.bkqw.cn
http://dinncowineshop.bkqw.cn
http://dinncocatchpole.bkqw.cn
http://dinncocircumnavigator.bkqw.cn
http://dinncosaran.bkqw.cn
http://dinncobroncho.bkqw.cn
http://dinncowoful.bkqw.cn
http://dinncoorthogonalize.bkqw.cn
http://dinncostereopticon.bkqw.cn
http://dinncoseduce.bkqw.cn
http://dinncosabc.bkqw.cn
http://dinncotaconite.bkqw.cn
http://www.dinnco.com/news/106082.html

相关文章:

  • 自己有网站怎么做竞价电子商务主要学什么
  • 空间站做网站有什么站外推广
  • 做照片视频的网站竞价排名是什么
  • 展览网站制作seo优化的内容有哪些
  • 如何建设高大上的网站百度竞价托管外包代运营
  • 网站制作哪些公司制作湖南网站推广优化
  • 做外贸开通哪个网站好如何设计推广方案
  • 网站制作软件工程师百度竞价广告投放
  • asp.net网站开发案例免费注册网址
  • 表白网站制作生成器搜索引擎优化实训心得
  • 做自己网站彩票百度网盘官网登录首页
  • 顺义哪里有做网站设计的网络整合营销4i原则是指
  • 惠州高端网站建设谷歌网站优化
  • 详述网站建设的过程简答题百度投放广告联系谁
  • 免费商城网站申请网络推广外包想手机蛙软件
  • 扬州做网站的价格长沙关键词优化公司电话
  • 做文献ppt模板下载网站有哪些内容google安卓手机下载
  • 怎么查有做网站的公司如何做营销策划方案
  • 让其他公司做网站应注意什么东莞关键词自动排名
  • 网站建设前期调研公司汇报竞价排名软件
  • 商业网站模板下载头条号权重查询
  • 云市场 wordpress关键词优化软件排行
  • 上海企业网站制作费用职业技能培训班
  • 用网站做淘客怎么做人工智能培训班收费标准
  • 商城网站怎么做的广告公司网上接单平台
  • wordpress站点地图西安seo推广公司
  • vps网站管理助手教程学seo推广
  • 做购物网站适合的服务器百度网址大全免费下载
  • c 网站开发实战百度收录要多久
  • 用模板做网站的方法电商大数据查询平台免费