Dart 內建有以下 6 種資料型別,分別是:
- numbers 數值
- strings 字串
- booleans 布林值
- lists (also known as arrays) 列表(或可視之為陣列)
- maps 鍵-值對映
- symbols 記號
一. numbers 數值
Dart 內建的數值型態有以下兩種:
- int 不定長度的整數。
- double 64bits 的雙倍精準浮點數。
例:
var i = 199; //十進位整數
var int i = 0XFF367B; //十六進位整數,以0X(或0x) 為開頭後接十六進位數值,A~F(或 a~f) 0~9。
var one = int.parse('1'); //從字串 '1' 解析成整數值 1。
var pi = 3.14159265359; //宣告圓周率
var double d = 1.42e5; //相當於 142000
var double d = 3.14159e-6; //相當於 0.00000314159
二. strings 字串
var i = 199; //十進位整數
字串值前後需以單引號 ' 或是雙引號 " 包夾:
var lang = 'Dart';
string title = "I love Dart";
若字串中有單引號 ' 或是雙引號 " ,則需在引號前多加一反斜線 \,例:
var title = 'Bill\'s last name is \"Wood\".';
若字串中只有單引號,則可以雙引號包夾字串,則字串中的單引號前不需加反斜線,例:
var title = "Bill's last name is Wood.";
反之若只有雙引號,則可以單引號包夾字串,而字串中的雙引號前不需加反斜線,例:
var title = 'My name is "Nick".';
可利用表示式 ${字串變數名} 的方式插入已宣告的字串值,例:
string lastName = "Wood";
string name = "Bill ${lastName}"; 輸出 ==> Bill Wood
若表示式中未作任何處理,則可以省略 { } ,直接使用 $字串變數名,例:
var name = "Bill $lastName"; 輸出 ==> Bill Wood
在表示式的 { } 中可以針對字串變數作相關處理,像是呼叫字串相關函式(functions),承上例:
var name = "Bill ${lastName.toUpperCase()}"; 輸出 ==> Bill WOOD
宣告字串值時,只要在分號 ; 之前不論是否空格、分段、斷行等皆會被視為是完整的字串值,例:var dart = "Dart is class " 'based '
"and object oriented, without being dogmatic.";
輸出 ==> "Dart is class based and object oriented, without being dogmatic."
宣告有斷行的字串值,可用 \n 當作斷行字元,或是直接用連續三個單引號(''')或雙引號(""")包夾字串值即可,例:
string segment = "Line1\nLine2\nLine3";
或是
string segment = """Line1
Line2
Line3""";
若宣告的字串值內容不想被上述特性處理,則可在包夾字串值的引號前加上 r ,則字串值將不會被上述特性處理,例:
string rawString = r"Bill\'s last name is Wood"; 輸出 ==> Bill\'s last name is Wood.
Dart 的字串值是以 UTF-16 編碼,故除了英文之外,也可以接受其他語言的字串值宣告,例如:
string title = "Dart 快!狠!準!";
三. booleans 布林值
在 Dart 的布林值中,是以 bool 作為對應的資料型別,而且只接受 true 或 false 這兩個布林值。
例:
bool isOpen = true;
var isEquals = (1+1)==3; //邏輯結果為布林值 false。
可針對布林值作運算的只有反向運算 !布林值,例:
bool isOpen = false;
bool isClose = !isOpen; //!false ==> true
if(isClose){
print("Closed");
}
輸出==> Closed四. lists 列表/Array陣列
在 Dart 中的陣列是以 List(列表)此一類別的方式體現。
宣告:
var list變數名= [元素0, 元素1,...元素n];
List list變數名= [元素0, 元素1,...元素n];
在宣告 list 中可以包含相同或是混雜不同資料型別的元素在初始列表值中:
例:
var valueList = ["cat", "dog", 3, 5, false];
list 元素的索引值是以 0 為始至列表長度-1為止。
例:
var nameList = ["John", "Lucy", "Bob", "Candy", "Sean", "Lydia"];
print("Length of nameList is ${nameList.length}");//輸出 ==>Length of nameList is 6
print("The first name is ${nameList[0]}");//輸出 ==>The first name is John
print("The last name is ${nameList[nameList.length-1]}");//輸出 ==>The last name is Lydia
print("The name at index 6 is ${nameList[6]}");//輸出 ==>報錯,依此例元素索引值只能到 5 (length-1)。
五. maps 對映表
在 map 中通常是以一 鍵(Key)配對一值(Value) 作為一筆資料。而 map 中可以儲存多筆的 Key-Value 資料,但是在 map 中的 Key是不能重複,而 Value 則准許重複。在 Dart 中 map 是以 Map 這個類別的方式體現。
例,宣告一人名:分數的對映表如下:
var scoreMap = {
//Key : Value
"John": 80,
"Bill": 82,
"Alison": 93
};
print(scoreMap["John"]); //輸出==> 80
print(scoreMap["Bill"]); //輸出==> 82
print(scoreMap["Alison"]); //輸出==> 93
scoreMap["Nick"]=100; //新增一筆資料
print(scoreMap["Nick"]);//輸出==> 100
print(scoreMap["Nick"]);//輸出==> 100
scoreMap.remove("Bill");//移除一筆指定鍵值的資料
print(scoreMap["Bill"]);//輸出==> null
//檢查 Map 中是否有指定的 Key(相當於檢查是否有指定 Key 所屬的 Value)
if(scoreMap["Seth"]==null){
print("Can't find Seth in scoreMap");
}
六. symbols 記號
※抱歉!對 symbols 的作用還不太了解,等熟悉了再回來補充說明。
沒有留言:
張貼留言