變量是每一們語言的基礎(chǔ),在Dart中所有變量都是對象,并且都有一個(gè)初始化的值null。
雖然在Dart中的變量的類型聲明的是可選的,但是Dart建議在變量使用類型聲明。
在本教程,我們將說明如何dart語言的變量聲明與初始化,以及變量的默認(rèn)值。
變量聲明與初始化
Dart 變量存儲(chǔ)的是引用,代碼var name = 'Bob';
的name
變量引用的是一個(gè) String
對象 , 值是Bob
。
這個(gè)name
變量會(huì)被Dart 類型系統(tǒng)推斷為String
,如果你不確定的變量的類型,你也可以將變量的類型指定為Object
或者dynamic
類型。
另一種選擇為變量是顯式聲明類型,這是Dart 推薦的方式變量聲明和初始化的方式。
var name = 'Bob';
dynamic name = 'Bob';
String name = 'Bob';
Dart 類型注釋是可選的,這里的類型注釋,可以是其它語言類型聲明或者類型定義。如果你是沒有開發(fā)經(jīng)驗(yàn)的新手,可以不必正確理解以下內(nèi)容。
如果省略類型注釋,Dart 會(huì)嘗試根據(jù)上下文推斷類型。有時(shí)它沒有足夠的信息來推斷出正確類型。
當(dāng)發(fā)生這種情況時(shí),Dart 有時(shí)會(huì)報(bào)告錯(cuò)誤,但通常會(huì)聲明dynamic
,這個(gè)過程通常稱為類型隱式轉(zhuǎn)換。隱式轉(zhuǎn)換為dynamic
使代碼看起來是推斷是正確且安全的。
但實(shí)際完全禁用了類型檢查。下面的規(guī)則在推斷失敗時(shí)要求指定類型來避免這種情況。
類型推斷是一種強(qiáng)大的工具,可以讓您省去編寫無趣的類型工作。它使讀者的注意力集中在代碼本身的行為上。
顯式類型也是健壯、可維護(hù)代碼的關(guān)鍵部分。它們定義API的靜態(tài)規(guī)范并創(chuàng)建邊界以記錄和強(qiáng)制允許哪些類型的值允許的。
當(dāng)然,類型推斷不是魔法。有時(shí)推理成功并選擇了一種類型,但它可能不是您想要的類型。
常見的情況是從變量的初始化中推斷出過于精確的類型。而您又打算稍后將其他類型的值分配給變量,在這種情況下,您必須顯式地聲明類型。
變量默認(rèn)值
未初始化的變量都有一個(gè)初始值null
,如果你沒有選擇null空安全,那么每個(gè)變量都有一個(gè)可以為null類型。
即使在初始化變量類型指定類型為數(shù)值,也是初始化為null值。因?yàn)樵贒art中一切都是對象。
如果開啟null安全,則必須在聲明變量時(shí)初始化變量的值。但在Dart 2.1.2添加late
修改器允許在開啟null安全的情況預(yù)先聲明變量。
late
修改器通常用于預(yù)先初始化不可為空的變量。惰性初始化一個(gè)變量。
int lineCount;
int lineCount = 0;
late String description;
Final 與 const
如果你一直不打算改變變量,則可以將變量聲明為final
或者const
。final
變量只可以賦值一次。
常量變量是編譯時(shí)的常量,也就是即隱式的final
,final
在類中使用之前必須被初始化。
const關(guān)鍵字不僅用于聲明常量變量,例如代碼const baz = [];
。您還可以使用它來創(chuàng)建常量值,例如代碼var foo = const [];
,以及聲明創(chuàng)建常量值的構(gòu)造函數(shù)。
final name = 'Bob'; // 沒有類型聲明
final String nickname = 'Bobby';
var foo = const [];
final bar = const [];
const baz = []; // 相當(dāng)于 const []
您可以改變不是final
,const
變量的值,即使變量有一個(gè)const
值。
例如代碼var foo = const [];
不是一個(gè)常量變量但它具有常量值const [];
。因此你可以修改變量foo
的值。
但是如果你嘗試修改常量變量的值,Dart 將會(huì)拋出靜態(tài)分析錯(cuò)誤Error: Constant variables can't be assigned a value。
例如代碼const baz = [];
,假如你嘗試修改常量baz
的值,運(yùn)行代碼baz = [42];
,Dart將會(huì)拋出錯(cuò)誤。
結(jié)論
至此,你已經(jīng)理解Dart 變量的初始化,變量的默認(rèn)值,變量在開啟null空安全時(shí)必須初始化變量,或者使用late修改器進(jìn)行聲明再初始化,最后理解常量變量,常量值以及final
關(guān)鍵詞。
-
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28475 -
初始化
+關(guān)注
關(guān)注
0文章
50瀏覽量
11954 -
Dart
+關(guān)注
關(guān)注
0文章
9瀏覽量
1766
發(fā)布評論請先 登錄
相關(guān)推薦
字符型、指針型等變量該如何初始化
使用SEGGER Embedded Studio編譯器發(fā)現(xiàn)變量無法自動(dòng)初始化
c語言初始化變量
【原創(chuàng)分享】變量的初始化技巧
qboot跳轉(zhuǎn)APP,APP聲明全局變量時(shí)無法初始化?
如何設(shè)置STM32單片機(jī)非初始化數(shù)據(jù)變量不被零初始化
![如何設(shè)置STM32單片機(jī)非<b class='flag-5'>初始化</b>數(shù)據(jù)<b class='flag-5'>變量</b>不被零<b class='flag-5'>初始化</b>](https://file.elecfans.com/web1/M00/80/DC/o4YBAFwscF6AAJ9mAACGEsAg-As650.jpg)
在51平臺(tái)下初始化文件的引入導(dǎo)致全局變量無法初始化的問題如何解決
![在51平臺(tái)下<b class='flag-5'>初始化</b>文件的引入導(dǎo)致全局<b class='flag-5'>變量</b>無法<b class='flag-5'>初始化</b>的問題如何解決](https://file.elecfans.com/web1/M00/A4/1F/pIYBAF1bWr6AW1IIAAqjwPD92Tk888.png)
使用51單片機(jī)進(jìn)行有關(guān)變量及初始化問題資料講解
![使用51單片機(jī)進(jìn)行有關(guān)<b class='flag-5'>變量</b>及<b class='flag-5'>初始化</b>問題資料講解](https://file.elecfans.com/web1/M00/A2/DA/o4YBAF1SIviAd2I0AAKKIr__AjE221.png)
評論