09 Dart 基础 关键字

1 Null Safety

翻译成中文的意思是空安全, 可以帮助开发者避免一些日常开发中很难被发现的错误,并且额外的好处是可以改善性能,Flutter2.2.0(2021年5月19日发布) 之后的版本都要求使用null safety。

? 可空类型  ! 类型断言

// 返回可空类型的函数
String? getUsername(String name) {
  if (name != null) {
    return name;
  }
  return null;
}

// 参数可空类型的函数
printLength(String? str) {
  try {
    print(str!.length);
  } catch (error) {
    print("this is not a correct string");
  }
}

void main() async {
  // String username = "Klay";
  // A value of type 'Null' can't be assigned to a variable of type 'String'.
  // username = null;
  // 以上代码 如果直接赋值给username的话 是会报错的
  // 所以用 ?声明类型为可空类型 就可以复制null了
  String? username = "Curry";
  username = null;
  print(username);

  int? age = 0;
  age = null;
  print(age);

  // 类型判断 !

  String? str1 = "this is a string";
  str1 = null;
  // 如果字符串是null 则会 出现异常。_CastError (Null check operator used on a null value)
  // print(str1!.length)

  // 调用下面方法处理
  printLength(str1);

  runApp(const MyApp());
}

2 late 

关键字主要用于延迟初始化。

3  required

equired翻译成中文的意思是需要、依赖

required关键词:

最开始 @required 是注解,在它已经作为内置修饰符。主要用于允许根据需要标记任何命名参数(函数或类),使得它们不为空。因为可选参数中必须有个 required 参数或者该参数有个默认值。

Dart 语言中,`final` 关键字用于声明不可变的变量,这意味着变量一旦被赋值,就不能再被重新赋值。与 `const` 不同,`final` 修饰的变量是在运行时进行赋值的,而不是在编译时。因此,`final` 变量的值可以在程序运行过程中动态确定,但只能赋值一次[^2]。 ### 用法和特性 #### 1. 声明不可变变量 使用 `final` 关键字可以声明一个变量,并且该变量在赋值后不能再次被修改。例如: ```dart final name = 'Bob'; // name = 'Job'; // 编译错误,不能修改 final 变量 ``` 这种方式适用于需要在运行时确定变量值的场景,例如从网络请求获取数据后赋值给 `final` 变量。 #### 2. 在类中使用 `final` 在类中定义 `final` 变量时,必须在构造函数中进行初始化,或者在声明时直接赋值。例如: ```dart class Person { final String name; Person(this.name); } void main() { final person = Person('Alice'); // person.name = 'Bob'; // 编译错误,不能修改 final 字段 } ``` #### 3. `final` 与集合类型 当 `final` 用于集合类型(如 `List` 或 `Map`)时,虽然集合本身是不可变的(不能重新赋值),但其内容是可以修改的。例如: ```dart final List<int> numbers = [1, 2, 3]; numbers.add(4); // 合法,修改集合内容 // numbers = []; // 非法,不能重新赋值 ``` #### 4. `final` 变量的对象创建 即使两个 `final` 变量的内容相同,它们仍然是不同的对象,因为 `final` 变量每次都会创建一个新的实例。例如: ```dart final List<int> list1 = [1, 2, 3]; final List<int> list2 = [1, 2, 3]; print(list1 == list2); // 输出 false,比较的是引用 print(identical(list1, list2)); // 输出 false,比较引用和内容 ``` #### 5. 在 `StatefulWidget` 中的使用 在 Flutter 的 `StatefulWidget` 中,`final` 修饰的变量会在组件初始化时被赋值,并且只能赋值一次。例如: ```dart class MyWidget extends StatefulWidget { final String title; MyWidget({required this.title}); @override _MyWidgetState createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { @override void initState() { super.initState(); print(widget.title); // 访问 final 修饰的变量 } @override Widget build(BuildContext context) { return Container(); } } ``` ### 作用总结 - **不可变性**:确保变量在赋值后不会被修改。 - **运行时赋值**:与 `const` 不同,`final` 变量的值可以在运行时动态确定。 - **线程安全**:由于 `final` 变量不可变,因此在多线程环境中更加安全。 - **优化性能**:减少不必要的重新赋值操作,提高代码的可读性和性能。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值