簡介
和所有的程式語言一樣,dart有他內建的語言型別,這些內建型別都繼承自Object,當然這些內建型別是dart語言的基礎,只有掌握了這些內建型別才能夠在使用dart語言的時候得心應手。
今天就給大家講解一下dart語言的內建型別。
Null
在dart中用null來表示空。那麼null和Null有什麼關係呢?
Null是一個類,先看下Null的定義:
class Null {
factory Null._uninstantiable() {
throw UnsupportedError('class Null cannot be instantiated');
}
external int get hashCode;
/** Returns the string `"null"`. */
String toString() => "null";
}
可以看到Null型別的string表示就是null。而相應的null是一個關鍵字,其對應的就是Null類。
數字
dart中的數字對應的類是num,他有兩個子類,分別是int和double。
int表示不大於64 bits的整數。因為dart可以執行在不同的平臺中,所以不同平臺表示的範圍也是不同的。
在原生平臺,比如android或者IOS平臺,int的範圍可以達到 -2^63 到 2^63 - 1。 但是在web環境中,可表示的範圍是-2^53 到 2^53 - 1.
double相應的表示的是浮點型別。
對於數字來說,基本的運算操作符像是 +, -, / 和 *都是定義在num類中。當然還有其他一些常規的操作符。
如果需要更加複雜的運算,則可以使用dart:math庫。
下面是幾個數字使用的例子:
int age =18;
int number= 20;
double money = 10.1;
字串
字串是經常會使用的一種型別。dart中字串對應的類是String。也可以直接用字面量表示如下:
var name ='jack';
var site ="www.flydean.com";
字串可以用單引號也可以用雙引號來表示。dart中字串使用的是UTF-16編碼。
dart中的字串中,還可以帶上變數值,他的格式是 ${expression}.
var age=10;
var words ='your age is ${age}!';
兩個字串可以用==來比較是否相等,字元比較的是對應的字元編碼序列,如果字元編碼序列相等,那麼對應的字串就相等。
字串的連線可以使用+。
var hello ="hello " + "word";
還有一種建立字串的方法是使用三個單引號或者三個雙引號。
var string1= '''
this is a string!
''';
var string2 = """
this is string again!
""";
預設情況下string中的字元表示就是字元本身,如果要轉換成其原始含義的話,則可以在字串前面加上r:
var string3 =r'this is line one \n this is line two';
布林值
布林值在dart中用bool來表示。bool值只有兩個字串表示,分別是true和false。
因為dart是型別安全的,也就是說在需要使用bool型別的時候,不能用其他型別代替。
比如我們要判斷字串是否為空,可以這樣判斷:
var name='';
if(name.isEmpty){
do something
}
列表
dart中的列表用List來表示,當然也可以直接使用下面的字面量表示:
var list = [1, 2, 3];
列表的index從0開始,以length-1結束。
從dart 2.3開始,引入了擴充套件符...和可為空的擴充套件符...? ,擴充套件符可以用將一個已知的list展開成其對應的元素,從而可以方便的構建list的組合:
var list = [1, 2, 3];
var list2 = [0, ...list];
dart中提供一個很神奇的功能,就是可以在構建list的過程中使用if和for語句,來動態生成list中的元素:
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
或者:
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
set和map
dart中的集合用Set來表示。
set表示的是不重複的元素的集合,如下所示:
var names = {'jack', 'mark', 'max'};
dart中的對映用Map來表示。
Map的建立和set很類似,但是包含了key和value:
var students = {'jack':18, 'mark':19, 'max':20};
大家可以發現,set和map是很類似的,那麼問題來了, 怎麼表示一個空的set或者map呢?
因為set中的元素是單個的,而map中的元素是鍵值對,所以我們可以這樣的表示:
var names = <String>{};
var gifts = Map<String, String>();
但是如果不指定型別,那麼預設建立的就是一個map:
var map = {};
要獲取map中的值,可以這樣使用:
var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
map和set都支援擴充套件符...和可為空擴充套件符...? , 同樣也支援集合內的if和for操作。
本文已收錄於 http://www.flydean.com/02-dart-buildin-type/
最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!