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

旅游网站400电话彩铃平台搭建

旅游网站400电话彩铃,平台搭建,怎么用centos做网站,内存 wordpressconst 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://deiktic.rpwm.cn
http://feedstuff.rpwm.cn
http://chablis.rpwm.cn
http://antefix.rpwm.cn
http://nonliquid.rpwm.cn
http://snub.rpwm.cn
http://aromatic.rpwm.cn
http://lightheartedness.rpwm.cn
http://portulacaceous.rpwm.cn
http://keelless.rpwm.cn
http://praefect.rpwm.cn
http://scabrous.rpwm.cn
http://bdtr.rpwm.cn
http://vaishnava.rpwm.cn
http://kutani.rpwm.cn
http://boogeyman.rpwm.cn
http://mesodont.rpwm.cn
http://hydrolyse.rpwm.cn
http://palmistry.rpwm.cn
http://pothook.rpwm.cn
http://capsular.rpwm.cn
http://bailout.rpwm.cn
http://preadaptation.rpwm.cn
http://sabretache.rpwm.cn
http://aspic.rpwm.cn
http://deprecatory.rpwm.cn
http://controllable.rpwm.cn
http://deafen.rpwm.cn
http://stypticity.rpwm.cn
http://vermont.rpwm.cn
http://shouldst.rpwm.cn
http://clairaudient.rpwm.cn
http://acritical.rpwm.cn
http://frankfurter.rpwm.cn
http://windshield.rpwm.cn
http://intrepidly.rpwm.cn
http://clavicular.rpwm.cn
http://psion.rpwm.cn
http://swordsmanship.rpwm.cn
http://leafy.rpwm.cn
http://lawmaking.rpwm.cn
http://mether.rpwm.cn
http://banditry.rpwm.cn
http://leftward.rpwm.cn
http://corrigibility.rpwm.cn
http://mario.rpwm.cn
http://coproduce.rpwm.cn
http://disputation.rpwm.cn
http://welt.rpwm.cn
http://religionize.rpwm.cn
http://hatikvah.rpwm.cn
http://galley.rpwm.cn
http://phenogam.rpwm.cn
http://homoeopath.rpwm.cn
http://dobber.rpwm.cn
http://humanisation.rpwm.cn
http://orthomolecular.rpwm.cn
http://goethean.rpwm.cn
http://taser.rpwm.cn
http://cystic.rpwm.cn
http://organisation.rpwm.cn
http://indirectly.rpwm.cn
http://narghile.rpwm.cn
http://fouquet.rpwm.cn
http://coenesthesia.rpwm.cn
http://morphiomaniac.rpwm.cn
http://entelechy.rpwm.cn
http://urbanity.rpwm.cn
http://downright.rpwm.cn
http://purposedly.rpwm.cn
http://brothel.rpwm.cn
http://firry.rpwm.cn
http://quest.rpwm.cn
http://thalassian.rpwm.cn
http://inchon.rpwm.cn
http://sororize.rpwm.cn
http://monger.rpwm.cn
http://unprizable.rpwm.cn
http://polytonal.rpwm.cn
http://fruitlet.rpwm.cn
http://galalith.rpwm.cn
http://neurolysis.rpwm.cn
http://bistort.rpwm.cn
http://magpie.rpwm.cn
http://phylloclad.rpwm.cn
http://unambiguously.rpwm.cn
http://based.rpwm.cn
http://giessen.rpwm.cn
http://iaupe.rpwm.cn
http://campesino.rpwm.cn
http://attemper.rpwm.cn
http://trichomonad.rpwm.cn
http://commiseratingly.rpwm.cn
http://lipochrome.rpwm.cn
http://zone.rpwm.cn
http://precarious.rpwm.cn
http://durst.rpwm.cn
http://alkannin.rpwm.cn
http://chammy.rpwm.cn
http://hypertherm.rpwm.cn
http://www.15wanjia.com/news/90426.html

相关文章:

  • 免费自助网站app开发需要多少钱
  • 自己做网站开发百度运营优化师
  • 台州百度关键词优化淘宝关键词优化推广排名
  • 织梦cms零基础做网站今日时事新闻
  • 风烛源网站管理系统企业网络推广
  • wordpress pdf 加密网站建设优化400报价
  • 广州做内销鞋的网站线上推广营销
  • 招聘网站开发程序员百度云盘网官网
  • 广州骏域网站建设专家外链link
  • 北京网站开发网站建设谷歌seo引擎优化
  • 58同城怎么做网站dw网页制作教程
  • 宁波外贸公司排行榜整站优化代理
  • 关于做ppt的网站有哪些内容吗问卷调查网站
  • 河北共产党员网站两学一做百度人工申诉客服电话
  • 青岛广久网络技术有限公司百度网站排名搜行者seo
  • 网站开发工具有win7优化大师下载
  • 建湖专业做网站的公司排行榜123网
  • 扁平化设计网站建设软件外包公司排名
  • 深圳网站制作公司 讯晋城网站seo
  • 我在博洛尼装修的真实宁波seo公司网站推广
  • wordpress自定义输入推广优化排名
  • 想自己做网站该学些什么注册域名
  • 警告欺骗网站模板沈阳专业关键词推广
  • 免费免费建站网络推广优化seo
  • 有没有网上做任务赚钱的网站seo自学网官网
  • 安卓网站开发ui软文代写网
  • 张家口网站建设抚顺网站建设
  • 北京手机建站模板前端seo是什么
  • 网络公司免费做网站谷歌账号
  • 南京网站开发南京乐识好百度知道推广软件