繁体   English   中英

DART:有人可以向我解释一下这条线吗?

[英]DART: can some explain this line to me?

我正在学习 Dart 和 Flutter,但我正在努力解决一些基本的编程问题,例如使用 getter:

GoogleSignInAccount get user => _user!;

“get”方法的等价物是什么?

是什么! 变量的末尾是什么意思?

提前致谢!

这是一个吸气剂,在 Java 中,代码可能如下所示:

public GoogleSignInAccount getGoogleUser(){ return this.user; }

Dart 喜欢写得更简洁的代码。

在 Dart 中,私有 class 成员通过变量/函数名称前面的 _ 表示。 因此,getter 返回的变量是私有变量,因此是_user

这。 变量名的末尾与 Dart null 安全有关。 投掷! 在变量名的末尾在功能上相当于说assert _user;= null; 它实际上所做的是将一个可为空的数据类型转换为其不可为空的等价物。

在 Dart 中,所有数据都有两种类型,一种可以为空的类型,用 a? 表示。 在数据类型声明的末尾,并且是不可为空的类型。

_user 变量,可以从这段代码中假设,是 GoogleSignInAccount 类型的? 这意味着它可以是 null。 然而,getter 想要返回一个 GoogleSignInAccount。 因为最后没有问号,所以getter返回的类型一定不能是null。 所以我们把。 在 _user 变量的末尾表示我们要将可为空的类型转换为它的非 null 形式。

另请注意,此 function 的名称是用户,在 Dart 中,如果一个是 getter,另一个是 setter,则可以拥有两个同名的函数。 要在 function 声明中表示 getter 与 setter,请使用如上所示的 get 和 set 关键字。

如果您想很好地了解 getter 和 setter 在 Dart 中的外观,请使用一些变量制作 class。 确保所有变量名都以 _ 开头,以便它们是私有的,然后右键单击 IDE 并告诉它为您生成一些 getter 和 setter。 我相信 Android Studio 和 VSCode 在其右键菜单中都有 Generate 选项。

私有变量末尾的感叹号告诉编译器该变量不是null,getter返回的用户数据一定不是null。

这里有两件事在起作用:

1.

GoogleSignInAccount get user => _user!;

GoogleSignInAccount user() {
  return _user;
}

第一个被称为吸气剂。

作为吸气剂,您可以像访问属性一样访问它。 例如

myUser = userService.user;

使用 function 表示法,您可以像访问它一样

myUser = userService.user();

由于您不计算任何内容而只公开该私有成员,因此 getter 表示法更加简洁。

2.

关于!

Dart 是 null 安全的,这意味着没有? 不能是 null。

在您的情况下, _userGoogleSignInAccount? 这意味着它可以是 null。 例如,在用户尚未登录时启动。

getter GoogleSignInAccount get user的类型为GoogleSignInAccount ,这意味着当您尝试将 null 分配给它时,编译器会给您一个错误。

所以用户不能是 null。 _user 可能是 null。

! 您将 promise 告诉编译器,当调用 getter 用户时,您知道_user是 null。

示例:如果用户在启动时加载而显示进度指示器,则可能是这种情况。 加载用户后,您将启动整个应用程序,现在您可以使用 user 访问user! . 您确定用户已加载。 如果您在加载之前以某种方式访问用户(当它仍然为空时),您会收到运行时错误。

Null 安全只是帮助您考虑变量是否可以是 null 并避免 NullPointerExceptions。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM