2014年3月14日 星期五

內建資料型別

Dart 內建有以下 6 種資料型別,分別是:
  • numbers 數值
  • strings 字串
  • booleans 布林值
  • lists (also known as arrays) 列表(或可視之為陣列)
  • maps 鍵-值對映
  • symbols 記號


一. numbers 數值

Dart 內建的數值型態有以下兩種:
  1. int 不定長度的整數。
  2. 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 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

scoreMap.remove("Bill");//移除一筆指定鍵值的資料
print(scoreMap["Bill"]);//輸出==> null

//檢查 Map 中是否有指定的 Key(相當於檢查是否有指定 Key 所屬的 Value)
if(scoreMap["Seth"]==null){
  print("Can't find Seth in scoreMap");
}


六. symbols 記號

※抱歉!對 symbols 的作用還不太了解,等熟悉了再回來補充說明。

沒有留言:

張貼留言