dart系列之:dart語言中的變數

flydean發表於2021-11-08

簡介

flutter是google在2015年dart開發者峰會上推出的一種開源的移動UI構建框架,使用flutter可以非常方便的編譯成執行在原始android,ios,web等移動平臺上的移動應用。

flutter是使用dart來編寫的,最新的flutter版本是2.5.3,而最新的Dart語言版本是2.14。

本系列將會深入談談dart語言的用法和最佳實踐,希望大家能夠喜歡。

dart中的變數

Dart語言吸取了java和javascript的精華,如果你是上述語言的開發者,那麼會很容易遷移到dart語言上。我們先從一個語言最基本的變數開始,探討dart語言的奧祕。

定義變數

Dart中定義變數和java,javascript中定義變數是一致的,如下所示:

var name = 'jack';

上面我們使用var表示name的型別是可以通過推斷得到。在程式編寫過程中,如果我們遇到某些變數並不知道其型別的時候,可以嘗試使用var,讓dart自行推斷。

當然,我們也可以指定變數的型別,如上所示,可以指定name為String型別:

String name = 'jack';

在dart中,所有的變數都是Object,而每個物件都是一個Class的例項。包括數字、函式、null都是Object。所有的物件都繼承自Object類。

所以上面的賦值也可以這樣寫:

Object name = 'jack';

變數的預設值

在dart中,未初始化的變數都有一個nullable型別的值,這個值的初始值是null。

和java中不一樣的是,dart中所有的number的初始值也是null。這是因為dart中的number也是一個物件。

如果一個變數可以為null,那麼在賦值的時候可以在變數型別後面加上?, 如下所示:

int? age;

對於類變數來說,只會在使用的時候進行初始化,這種初始化策略叫做延時初始化。

Late變數

Late修飾符是在Dart 2.12引入的新特性。他可以表示變數需要被延時載入,或者表示一個不為空的變數會在後續被初始化。

我們可以這樣使用:

late int age;

void main() {
  age = 18;
  print(age);
}

為什麼用late呢?因為有時候Dart無法檢查某些變數在使用之前是否被初始化了,但是如果你非常確定的話,使用late來修飾它即可。

另外,late修飾的變數只有在使用的時候才會被初始化,所以我們可以使用late來定義一些耗時、耗資源的操作。

常量

如果變數是不會變化的,那麼這就不是變數了,而是常量。

常量可以用final或者const來修飾,final變數表示變數只會被賦值一次。

而const變數表示變數會在編譯的時候被賦值,預設const也是final的。

如下所示:

final age = 18; 
final int age = 18;
const age = 20; 

如果const變數是class變數,那麼將其設定為static。

constant還可以用來賦值,如下所示:

var age = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

上面的程式碼中,雖然age的值是const的,但是age本身並不是const,所以age是可以重新被賦值的:

foo = [18, 21, 23]; 

但是bar是final的,所以bar並不能被重新賦值。

總結

以上就是dart語言的變數使用了。

本文已收錄於 http://www.flydean.com/01-dart-variables/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章