Dart 語言簡易教程(二)

Dart 語言簡易教程(一): http://www.lxweimin.com/p/8a62b1a2fd75

Dart 語言簡易教程(二)

內建數據類型(Built-in types)

Dart 語言內建了下面集中類型

  • numbers
  • strings
  • booleans
  • lists (also known as arrays)
  • maps
  • runes (for expressing Unicode characters in a string)
  • symbols

Number 類型

Dart 類型包括如下兩類

  • int
    取值范圍:-2^53 to 2^53

  • double
    64 位長度的浮點型數據,符合IEEE 754 標準。

int 和 double 類型都是 num 類型的子類。
num 類型包括的操作包括: +, -, *, / 以及位移操作>>.
num 類型 有如下常用方法 abs(), ceil()和 floor()。完整的使用方法請參見:dart:math 包的使用說明。

int 類型不能包含小數點..

num類型操作例子:

// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

num 類型按位操作的例子:

assert((3 << 1) == 6);  // 0011 << 1 == 0110
assert((3 >> 1) == 1);  // 0011 >> 1 == 0001
assert((3 | 4)  == 7);  // 0011 | 0100 == 0111

Strings 類型

Dart 的String 是 UTF-16 編碼的一個隊列。

Dart語言定義的例子:

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

String 類型可以使用 + 操作:

var s1 = 'String ' 'concatenation'
         " works even over line breaks.";
assert(s1 == 'String concatenation works even over '
             'line breaks.');

var s2 = 'The + operator '
         + 'works, as well.';
assert(s2 == 'The + operator works, as well.');

可以使用三個來定義多行的String 類型。
(這點和Python 語言類似。)

var s1 = '''
You can create
multi-line strings like this one.
''';

var s2 = """This is also a
multi-line string.""";

可以使用r 來修飾String類型,表 表明是“raw” 類型字符串:

var s = r"In a raw string, even \n isn't special.";

String 類型是 compile-time 的常量。
可以在編譯是才給String類型賦值。

// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';

// These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = const [1, 2, 3];

const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';

booleans 類型

Dart 的布爾類型名字是bool,可能的取值包括”ture“ 和 ”false“。
”bool“ 類型是 compile-time 的常量。

Dart 是強bool 類型檢查,只有bool 類型的值是”true“ 才被認為是true。

var name = 'Bob';
if (name) {
  // Prints in JavaScript, not in Dart.
  print('You have a name!');
}

在production mode 中上面的代碼將不會輸出任何東西,因為name != true
checked mode 中上面的代碼將會出現異常,因為name不是bool 類型。

Lists 類型

在 Dart 語言中,具有一系列相同類型的數據被稱為 List 對象。
Dart List 對象類似JavaScript 語言的 array 對象。

定義list的例子:

var list = [1, 2, 3];

Dart list 對象的第一個元素的位置是0,最后個元素的索引是list.lenght - 1

var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);

Maps 類型

Map 類型將keys 和 values 關聯在一起。
keys 和 values 可以是任意類型的對象。
像其它支持Map 的編程語言一樣,Map 的 key 必須是唯一的。

Map 對象的定義:

var gifts = {
// Keys      Values
  'first' : 'partridge',
  'second': 'turtledoves',
  'fifth' : 'golden rings'
};

var nobleGases = {
// Keys  Values
  2 :   'helium',
  10:   'neon',
  18:   'argon',
};

也可以使用Map 對象的構造函數 Map() 來創建Map 對象:

var gifts = new Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = new Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

添加新的key-value 對:

var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

檢查key 是否在Map 對象中:

var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);

使用.lenght 來獲取key-value 對的數量:

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

Runes 類型

Dart 中 runes 是UTF-32字符集的string 對象。
codeUnitAtcodeUnit 用來獲取UTF-16字符集的字符。
使用runes 來獲取UTF-32字符集的字符。

main() {
  var clapping = '\u{1f44f}';
  print(clapping);
  print(clapping.codeUnits);
  print(clapping.runes.toList());

  Runes input = new Runes(
      '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');

上面例子的輸出結果是:


[55357, 56399]
[128079]
          

Symbols 類型

一般程序中不會使用Symbol類型。
Symbol類型跟在#后面。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容