簡體   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