- 用Flutter極速構(gòu)建原生應(yīng)用
- 張益琿
- 1174字
- 2020-01-20 15:01:03
2.2 Dart中的變量
講到變量,相信有中學(xué)數(shù)學(xué)基礎(chǔ)的讀者都會非常熟悉。在數(shù)學(xué)中,變量是一個非常重要的概念,在方程組、函數(shù)中隨處都可以見到變量的影子。在編程中,變量也是一個非常重要的概念。從字面上來理解,變量即表示可以改變的量值,其實(shí)有些不準(zhǔn)確,變量更像是一個容器,用來存儲數(shù)據(jù),數(shù)據(jù)可能是可變的,也可能是不可變的,不同類型的數(shù)據(jù)對應(yīng)不同類型的變量。Dart中的變量功能強(qiáng)大,本節(jié)我們就來學(xué)習(xí)變量相關(guān)的知識。
2.2.1 使用變量
在開始學(xué)習(xí)變量之前,我們先來分析一個簡單的程序,代碼如下:

這是一個非常簡單的Dart程序,運(yùn)行后不會有任何輸出。然而麻雀雖小,五臟俱全。首先,任何一個Dart程序都需要一個入口函數(shù),即main函數(shù),和Java、C語言一樣,不論main函數(shù)寫在文件的哪個位置,在Dart程序執(zhí)行時都會先找到它,上面的代碼在main函數(shù)中創(chuàng)建并初始化了一個變量:name。需要注意,在每一句Dart語言的結(jié)尾都要使用符號“;”進(jìn)行標(biāo)記。
var關(guān)鍵字用來聲明變量,var是一個非常有意思的關(guān)鍵字,在Dart中,變量都是有類型的,var關(guān)鍵字的作用是讓解釋器來推斷變量的類型,在變量進(jìn)行賦值時,解釋器會根據(jù)賦值對其類型進(jìn)行推斷,上面的name變量會被推斷成字符串類型(string)。變量的類型一旦確定,如果對其賦予了不同類型的值,就會產(chǎn)生錯誤,例如:

運(yùn)行上面的代碼,會報出如下錯誤:
Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
這個錯誤的意思是將int類型的值賦給了string類型的變量,這在語法上是不被允許的。
和很多強(qiáng)類型語言一樣,Dart也非常強(qiáng)調(diào)類型安全。很多時候,變量類型確定后,我們不需要將其他類型的值賦給它,但是總有特殊情況出現(xiàn),如果某個變量的類型是可變的,在Dart中就可以使用dynamic關(guān)鍵字來聲明,它的意思是變量的類型是動態(tài)的,例如:
dynamic age = 26; age = "26";
當(dāng)然,如果你想強(qiáng)制變量的類型,也可以在聲明變量時顯式地標(biāo)注它的類型,比如:
String subject = "Dart";
上面的代碼顯式地聲明subject變量的類型為字符串類型(String類型)。
上面所有的示例代碼中,在聲明變量的同時都對其進(jìn)行了賦值,這個過程也叫作變量的定義。當(dāng)然,你也可以只對變量進(jìn)行聲明,并不賦值,這時變量會被設(shè)置為默認(rèn)值null,例如:
var uninit ; print(uninit);//將輸出null
還有一點(diǎn)需要注意,在Dart中,無論什么類型的變量,如果不對其進(jìn)行賦值,那么它的默認(rèn)值都是null,這和一些類C語言不同,在Dart中,所有數(shù)據(jù)都是對象,請牢記,這點(diǎn)非常重要。
2.2.2 不可變變量
在開發(fā)中,很多時候有些數(shù)據(jù)是不可變的,例如一些配置項(xiàng)。對于不可變的變量,可以使用final或者const關(guān)鍵字。final關(guān)鍵字聲明的變量為最終變量,const關(guān)鍵字聲明的變量為常量。無論使用哪一個關(guān)鍵字,在聲明時,都需要對變量進(jìn)行賦值,例如:
final a = 1; final String b = "sss"; const c = 2; const int d = 3;
如果在聲明時沒有對其進(jìn)行賦值或者在定義完成后又對其進(jìn)行了修改,在運(yùn)行時就會拋出異常。
在實(shí)際開發(fā)中,適當(dāng)?shù)厥褂胒inal和const關(guān)鍵字十分重要。一些數(shù)學(xué)常數(shù)(例如標(biāo)準(zhǔn)氣壓、重力單位等)在程序中使用時都可以定義成不可變的變量。
- Computer Vision for the Web
- Java FX應(yīng)用開發(fā)教程
- 新手學(xué)Visual C# 2008程序設(shè)計(jì)
- C語言程序設(shè)計(jì)
- Python編程:從入門到實(shí)踐
- HTML5從入門到精通 (第2版)
- iOS開發(fā)實(shí)戰(zhàn):從入門到上架App Store(第2版) (移動開發(fā)叢書)
- C++反匯編與逆向分析技術(shù)揭秘(第2版)
- Building Dynamics CRM 2015 Dashboards with Power BI
- 從零開始學(xué)UI設(shè)計(jì)·基礎(chǔ)篇
- 程序員面試金典(第6版)
- Three.js Essentials
- 人件集:人性化的軟件開發(fā)
- Flink原理深入與編程實(shí)戰(zhàn):Scala+Java(微課視頻版)
- Python AI游戲編程入門:基于Pygame和PyTorch