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

Dart关键字完全指南:从基础到高级用法详解

Dart 关键字全面解析:从入门到精通

引言

Dart 作为 Flutter 框架的官方语言,近年来获得了广泛关注。掌握 Dart 的关键字是学习这门语言的基础,本文将全面解析 Dart 的所有关键字,帮助开发者深入理解其用法和最佳实践。


一、变量与常量声明

1. var - 类型推断声明

var name = 'Dart';  // 自动推断为String类型
var version = 2.12; // 自动推断为double类型
  • 声明时必须初始化
  • 类型确定后不可更改

2. final - 运行时常量

final currentTime = DateTime.now(); // 运行时初始化
  • 只能赋值一次
  • 运行时可确定值

3. const - 编译时常量

const pi = 3.14159;  // 编译时就必须确定值
const list = [1, 2, 3]; // 整个列表不可变
  • 值必须是编译时可计算的
  • final有更严格的限制

4. late - 延迟初始化

late String description; // 声明时不初始化void init() {description = 'Initialized'; // 使用前初始化
}
  • Dart 2.12引入
  • 用于非空变量的延迟初始化

变量声明对比表

关键字初始化时机是否可变典型用途
var声明时局部变量
final运行时配置参数
const编译时常量定义
late使用时依赖注入

二、流程控制结构

1. 条件语句

// if-else
if (score >= 90) {grade = 'A';
} else if (score >= 60) {grade = 'B';
} else {grade = 'C';
}// switch-case
switch (command) {case 'START':start();break;case 'STOP':stop();break;default:print('Unknown command');
}

2. 循环结构

// for循环
for (var i = 0; i < 5; i++) {print(i);
}// for-in循环
for (var item in collection) {print(item);
}// while循环
while (!done) {doSomething();
}// do-while循环
do {print('至少执行一次');
} while (false);

3. 循环控制

// break - 跳出整个循环
while (true) {if (condition) break;
}// continue - 跳过当前迭代
for (var i = 0; i < 10; i++) {if (i.isOdd) continue;print(i); // 只打印偶数
}

三、函数与异步编程

1. 基本函数

// 常规函数
int add(int a, int b) {return a + b;
}// 箭头函数(单行)
int multiply(int a, int b) => a * b;

2. 异步处理

// async/await
Future<String> fetchData() async {var data = await http.get('api/data');return processData(data);
}// 错误处理
try {var result = await fetchData();
} catch (e) {print('Error: $e');
} finally {cleanUp();
}

3. 生成器函数

// 同步生成器
Iterable<int> countTo(int n) sync* {for (var i = 1; i <= n; i++) {yield i;}
}// 异步生成器
Stream<int> countDown(int n) async* {for (var i = n; i > 0; i--) {yield i;await Future.delayed(Duration(seconds: 1));}
}

四、面向对象编程

1. 类与继承

class Animal {String name;Animal(this.name);  // 构造函数void eat() => print('$name is eating');
}class Dog extends Animal {Dog(String name) : super(name);  // 调用父类构造函数void eat() {super.eat();  // 调用父类方法print('...and wagging tail');}
}

2. 接口与混入

// 接口
abstract class Flyable {void fly();
}class Bird implements Flyable {void fly() => print('Flying high');
}// 混入(mixin)
mixin Swimming {void swim() => print('Swimming');
}class Duck extends Animal with Swimming {}

3. 工厂模式

class Logger {final String name;static final _cache = <String, Logger>{};factory Logger(String name) {return _cache.putIfAbsent(name, () => Logger._internal(name));}Logger._internal(this.name);
}

五、高级特性

1. 扩展方法

extension StringExtension on String {String get reversed => split('').reversed.join();int toInt() => int.parse(this);
}void main() {print('123'.reversed);  // '321'print('42'.toInt());    // 42
}

2. 类型定义

typedef JsonMapper = Map<String, dynamic> Function(String json);JsonMapper parser = (json) => jsonDecode(json);

3. 空安全

String? nullableString = maybeGetString();  // 可能为nullif (nullableString != null) {print(nullableString.length);  // 安全访问
}// 空断言操作符
print(nullableString!.length);  // 开发者确保不为null

最佳实践

  1. 优先使用final:除非需要修改变量,否则使用final
  2. 合理使用const:能使用const的地方尽量使用
  3. 避免dynamic:除非必要,否则不要使用dynamic
  4. 善用late:明确延迟初始化的变量使用late
  5. 类型安全:尽可能指定明确类型而非使用var
  6. 异步处理:优先使用async/await而非Future.then

结语

掌握 Dart 关键字是成为高效 Dart 开发者的第一步。本文涵盖了 Dart 的主要关键字及其用法,建议读者在实际开发中多加练习,逐步深入理解这些关键字的精髓。随着 Dart 语言的不断发展,新的特性也会不断加入,保持学习才能跟上技术发展的步伐。

希望这篇指南能帮助你在 Dart 开发之路上走得更远!

http://www.lryc.cn/news/614622.html

相关文章:

  • 商品期货场外期权系统解决方案:跨境金融科技赋能大宗商品风险管理
  • 【代码随想录day 15】 力扣 110.平衡二叉树
  • Android初学者系统开发学习路线参考
  • Zabbix网络发现:自动化监控新利器
  • 【无标题】无名管道
  • NY128NY133美光固态闪存NY139NY143
  • 施耐德Twido PLC怎么实现远程上下载程序和编程配置?
  • F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代
  • 安全常见漏洞
  • openpnp - 不连接设备,只大概测试一下摄像头是否好使
  • Java中的方法引用操作符(::)详解与实战应用
  • Linux 运维与优化的系统化思维:从内核到生产环境的全链路管理
  • 【C++】类和对象--类中6个默认成员函数(2) --运算符重载
  • 笔试——Day32
  • 基于LLM的Chat应用测试方法探索:系统化评估与持续优化
  • 企业本地知识库助手 大模型+本地知识库
  • Prometheus 监控平台部署与应用
  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 三种 SSE 对比
  • 【LLM开发学习】
  • 十三、抽象队列同步器AQS
  • ClickHouse集群部署实践---3分片2副本集群
  • 【C#】掌握并发利器:深入理解 .NET 中的 Task.WhenAll
  • 宝龙地产债务化解解决方案一:基于资产代币化与轻资产转型的战略重构
  • MMBFJ310LT1G一款N沟道JFE 晶体管适用于高频放大器和振荡器等射频应用MMBFJ310LT1
  • 【vue】Vue 重要基础知识清单
  • 全面解析软件工程形式化说明技术
  • Vue 服务端渲染(SSR)详解
  • 页面tkinter
  • 初始化完数据库提示缺少server文件的处理方法