- 用Flutter極速構建原生應用
- 張益琿
- 2448字
- 2020-01-20 15:01:04
2.3 Dart中的內置數據類型
通過前面的學習,對于數據類型你已經有了簡單的理解。在Dart中,萬事萬物皆是對象。也就是說,無論是什么類型的數據,其都是某個類的實例,在Dart中,你可以使用字面量來創建這些對象,也可以使用類的構造器來創建這些對象(非抽象類)。
Dart中內置了7類特殊的數據類型,分別為numbers(數值類型)、strings(字符串類型)、booleans(布爾類型)、lists(列表類型)、maps(圖類型)、runes(字符類型)和symbols(符號類型)。本節我們主要學習這些內置的數據類型。
2.3.1 數值類型
顧名思義,數值類型用來描述與數值相關的數據。在數學中,數有多種分類方法,比如可以分為整數、小數,也可以分為正數、負數等。在Dart中,數值類型有兩種,分別為int和double。int是integer的縮寫,用來描述整型數據;double是雙精度浮點類型,即用64位來描述帶有小數的數值。
可以使用字面量來直接創建數值對象,例如:
int a = 99; int b = 0xA1; print(a);//99 print(b);//161
如果使用0x開頭定義數值,就表示使用十六進制數值。如果一個數值包含小數,就需要將其定義為double類型。我們也可以使用直接定義與指數定義來定義小數,例如:
double c = 3.14; double d = 1.4e2; print(c);//3.14 print(d);//140.0
e符號表示科學計數法,上面的1.4e2表示1.4乘以10的2次方,最終的結果為140。需要注意,雖然結果為整數,但其類型依然是double類型。在Dart 2.1版本后,整型數值是可以直接賦值給浮點型變量的,Dart會自動處理將其轉換成浮點數,例如:
double e = 1; print(e);//1.0
int和double類型中都定義了許多常用的屬性和方法,通過屬性我們可以獲取許多關于當前數值對象的信息,例如:

數值類型中還定義了許多常用的方法,這個方法實際上就是函數,它們幫助開發者對數值數據進行操作,例如:

上面列舉的方法都有詳盡的注釋,并且這些方法是int類型對象和double類型對象所通用的。對于int類型數據,其還可以調用許多獨有的方法,例如:

2.3.2 字符串類型
字符串是編程中常用的數據類型。在Dart中,可以使用單引號或者雙引號來創建字符串,例如:
var str1 = "Hello"; var str2 = 'World';
更多時候,我們需要對字符串進行格式化,例如將某個變量的值插入字符串中,或者將某個表達式的運算結果插入字符串中。在Dart中,使用$來進行字符串的格式化,例如:

需要注意,如果要將表達式的值插入字符串中,就需要使用大括號標記,即${}。
字符串也支持直接使用“+”運算符來進行拼接,示例如下:
var str1 = "Hello"; var str2 = 'World'; print(str1+str2);//HelloWorld
其實,即使你不使用運算符,相鄰的字符串也會自行進行拼接,例如:
print('hello''world');//helloworld
使用3對單引號或者3對雙引號可以進行多行字符串的創建,在某些應用場景下,這個語法特點十分有用,例如:
var str5 = '''第一行 第二行 第三行'''; var str6 = """第一行 第二行 第三行""";
和C語言類似,Dart中的字符串也支持使用反斜杠來進行字符的轉譯,常用的轉譯字符是引號與換行符,例如:
print('hello \'琿少\'');//hello '琿少' //hello //world print("hello\nworld");
當然,如果你不想進行轉譯,想讓字符串完全匹配其字面的意思,就可以使用原始字符串,例如:
print(r"hello\nworld");//hello\nworld
上面的示例代碼中,我們都是采用字面量直接進行字符串對象的創建的,其實也可以使用構造方法來創建字符串,例如:
var str7 = String.fromCharCode(97);//字符碼97對應字符a var str8 = String.fromCharCodes([97,98,99]);//abc
可以通過調用字符串對象的一些屬性來獲取當前字符串的相關信息,列舉如下:

String類中的相關方法也可以幫助我們對字符串進行運算或修改,列舉如下:

除了上面列舉的方法外,如果要對字符串進行拷貝,就可以直接使用“*”運算符,例如:
print("hello"*2);//hellohello
其實,字符串也是一種集合類型,在Dart中,集合類型的數據都可以使用中括號來獲取集合內的某個元素,例如:
print("hello"[0]);//h
2.3.3 布爾類型
布爾類型是Dart中一種簡單的數據類型,其只有兩個字面量值:true和false。
布爾類型雖然簡單,卻是編程中必不可少的數據類型。在實現復雜的邏輯分支時,往往需要判斷大量的條件,布爾運算是條件運算的核心。定義布爾值的示例如下:
bool a = true; bool b = false;
布爾類型非常簡單,bool類中沒有封裝太多的屬性,可以使用runtimeType來獲取類型:
bool a = true; bool b = false; print(a.runtimeType);//bool
可以調用布爾對象的toString方法來將布爾值轉換成字符串,例如:
bool a = true; print(a.toString());//true
2.3.4 列表類型
列表用來存放一組數據,在許多編程語言中,列表這種數據類型也被稱為數組。在Dart中,列表具體的數據類型由其中的元素類型決定,例如下面是完整的聲明列表變量的格式:
List<int> list = [1,2,3,4];
其中,尖括號中的類型用來指定列表中元素的類型,如果列表明確了其中元素的類型,它就只能存放這種類型的數據,否則會產生運行時異常。例如下面的寫法是不允許的:
List<int> list = [1,2,3,4,"5"];
若想在列表中存放不同類型的數據,則可以將列表聲明成動態類型的,例如:
List<dynamic> list = [1,2,3,4,"5"];
其實更多時候,我們不需要手動指明列表的類型,可以利用Dart的類型推斷特性,直接使用var進行聲明即可,例如:
var list = [1,2,3,4,"5"];
除了使用字面量來進行列表對象的創建外,我們還可以通過構造方法來創建,示例如下:

需要注意,使用new關鍵字調用構造方法是Dart的標準對象構造語法,Dart 2允許開發者在調用構造方法時省略new關鍵字,這使我們的代碼看起來更加簡潔清爽。
下面列舉列表對象中的一些常用屬性:

和字符串一樣,列表也可以使用中括號進行取值或設置值,同樣支持使用運算符進行相加操作,例如:

需要注意,在對列表中的值進行設置時,如果下標超出了列表元素的個數,就會產生溢出異常。
List類中封裝了大量的實例方法,這些方法可以極大地提高開發者的工作效率,列舉如下:

2.3.5 字典類型
相信你一定有過查詞典的經歷。以英漢詞典為例,當你需要學習某個漢語詞匯對應的英文詞匯時,首先需要在索引處找到這個漢語詞匯,不同的漢語詞匯有可能會查到相同的英文詞匯。字典數據類型也是這樣的,更精確的說法是,字典是一組鍵值對的集合,通過鍵可以完成對值的修改、查找、添加或刪除。在Dart中,字典類型叫作Map。
使用大括號可以通過字面量值創建字典對象,例如:

對于Map類型,在創建時,鍵和值要成對出現。一般情況下,鍵都是字符串類型的。但是在Dart中并沒有嚴格的語法規定,鍵可以是任意類型的,值也可以是任意類型的。但是需要注意,與List類型一樣,一旦Map的類型被確定,其鍵和值的類型就必須遵守。完整的Map類型變量的聲明格式如下:
//鍵為字符串類型、值為整數類型的字典 Map<String,int> map2 = {"1":1,"2":2};
通過鍵可以實現對值的獲取、設置和新增,例如:

Map對象中常用的屬性列舉如下:

同樣,Map類中也封裝了許多實例方法可以供我們直接使用,示例代碼如下:

- Java應用與實戰
- 企業級Java EE架構設計精深實踐
- PHP 從入門到項目實踐(超值版)
- 深入理解Django:框架內幕與實現原理
- Java加密與解密的藝術
- Mastering Swift 2
- 深度強化學習算法與實踐:基于PyTorch的實現
- GameMaker Programming By Example
- Scientific Computing with Scala
- JavaCAPS基礎、應用與案例
- NetBeans IDE 8 Cookbook
- Create React App 2 Quick Start Guide
- 小程序,巧應用:微信小程序開發實戰(第2版)
- SQL Server 2016 從入門到實戰(視頻教學版)
- Extending Unity with Editor Scripting