当前位置: 首页 > 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.dtcms.com/a/321099.html

相关文章:

  • [GESP202309 五级] 2023年9月GESP C++五级上机题题解,附带讲解视频!
  • 《Git从入门到精通:告别版本管理混乱》
  • Git 工程迁移指南
  • 如何在 Ubuntu 24.04 LTS 或 22.04/20.04 上安装 Apache Maven
  • ORACLE物化视图快速刷新失败原因查找
  • Oracle 的 exp(传统导出工具)和 expdp(Data Pump 导出工具)是两种命令对比
  • Python合并两个PDF文件
  • 汽车专题 | 视觉AI正在重构整车质检格局
  • OpenAPI(Swagger3)接口文档自定义排序(万能大法,支持任意swagger版本)
  • 基于AI MCP协议, 写一个MCP服务用于连接数据库执行sql
  • PostgreSQL技术大讲堂 - 第100讲:玩转PG数据库对象权限卷之迷宫
  • Langchain入门:构建一个基于SQL数据的问答系统
  • DM8数据库服务正常,但是登录报错 [-70019]:没有匹配的可登录服务器
  • 项目历程—可视化文件系统
  • ESP32-menuconfig(2) -- Application manager
  • MyBatis SQL映射与动态SQL:构建灵活高效的数据访问层 MyBatis SQL映射与动态SQL:构建灵活高效的数据访问层
  • wodpress结构化数据对SEO的作用
  • 【重磅发布】flutter_chen_keyboard -专注于键盘相关功能
  • Flutter多引擎架构下原生通信的模块化封装与性能优化
  • Spring AI将存量接口转化为MCP服务(附源码)
  • MES系统是什么?从核心功能到行业应用,打造智能制造新引擎
  • nlp-语义分析
  • 全面了解svm
  • 从零开始将项目镜像部署到离线Windows服务器的完整流程
  • ADB打印设备日志相关
  • GPT-5 全面解析与 DeepSeek 实战对比:推理、工具调用、上下文与成本
  • 十三、抽象队列同步器AQS
  • luckfox开发板的usb口作为串口使用
  • 【matlab】采样信号的低通滤波、高通滤波
  • SVN下载及安装(保姆级别)