Dart中的空对象

zqdjd7g9  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(97)

在阅读区块插件文档时,我遇到了此代码。我的问题是为什么我们需要空的静态类在这里。如果我们想检查null,我们已经有了null check ?功能。
代码:

import 'package:equatable/equatable.dart';

class User extends Equatable {
  const User(this.id);

  final String id;

  @override
  List<Object> get props => [id];

  static const empty = User('-');
}

内容的原始截图

参考内容:https://bloclibrary.dev/#/flutterlogintutorial?id=user-repository

sulc1iza

sulc1iza1#

在真实的世界的项目中,你会遇到一些不能使用null安全的情况,例如,如果你有一个函数已经被使用了很多地方,你不能改变它(现实世界的维护问题):

// This function cannot be edit for many reason
String getUserId(User user) {
  return user.id;
}

然后如果你有一个可空的user,你不能把它传递给上面的函数,我见过很多人试图像这样调用上面的函数:

final String userId = getUserId(user ?? User("-"));

当这种情况发生时,这将是不好的做法,因为如果项目有许多开发人员,每个人都将有自己的方式来决定哪些用户将是空的User。许多例子他们可以想到:User("-")User("-1")User(""),...
那么上面的空静态值将解决这个问题,每个都将使用User.empty作为均匀性

6yjfywim

6yjfywim2#

看起来作者可能试图使用Null Object Pattern
当“空性”意味着任何对象在任何时候都可以为空时,这种模式就被考虑出来了,如果你想让它真正安全的话,你的代码将是if/else分支的噩梦。
dart 非常酷的声音零安全,我个人不明白为什么它会有用,但我想每个人都使用他们喜欢的模式。
如果你想知道为什么它会在那里,只需测试它:删除它,然后修复所有在编译时弹出的错误,在运行时测试它,然后找出你更喜欢的版本。也许它有你还没发现的作用

相关问题