请解释 Dart 中的空安全特性,并阐述在实际开发中应当如何使用它?
考察说明
考查对 Dart 空安全特性的理解及实际应用能力。
回答思路
- 【回答框架 1】空安全是 Dart 2.12 引入的编译期特性,旨在消除空引用异常。其核心在于类型系统区分可空类型和不可空类型,如 String? 表示可能为 null,String 则不能为 null。编译器会在编译期检查潜在的空值问题,提前发现错误。
- 【回答框架 2】使用时,默认声明的变量不可为空,必须初始化。若需允许 null,则类型后加问号。访问可空变量前需进行空检查,如使用 if 判断、? 条件调用、?? 提供默认值、! 断言非空。
- 【回答框架 3】还提供 late 关键字用于延迟初始化,以及 late final 用于延迟且只赋值一次。此外,空安全与类型提升配合,可在检查后自动将可空类型提升为不可空,以便安全访问。
- 【关键点 1】空安全使类型系统区分可空与不可空,编译期防止空引用。
- 【关键点 2】类型后加 ? 允许 null,不加则禁止,需初始化。
- 【关键点 3】使用 ?.、??、! 等运算符处理可空值。
- 【关键点 4】late 关键字用于延迟初始化,但需确保使用前赋值。
- 【关键点 5】空安全已在 Dart 2.12+ 默认启用。
- 【易错点 1】滥用 ! 断言可能导致运行时空错误。
- 【易错点 2】误用 late 变量未初始化就访问,同样抛出异常。
- 【易错点 3】过度使用 ?. 可能使代码冗长,应结合逻辑简化。