一拯辙、重要概念
- 一切變量都是對象郭变,包括數(shù)字,函數(shù)和
null
- 對象是類的實例,所有類都繼承與
Object
- 強類型但支持類型推斷
- 如果不想制定具體類型可以使用
dynamic
- 支持泛型饵较,比如
List<int>
或者List<Dynamic>
- 支持頂層函數(shù)拍嵌、類方法、實例方法和嵌套函數(shù)
- 支持頂層變量循诉、類變量横辆、實例變量和局部變量。
二茄猫、變量的私有和公開
Dart 變量只有私有和公開兩種類型
- 以
_
下劃線開頭變量為私有狈蚤、只能在Library
中使用 - 標識符只能以字母或者下劃線大頭、后面跟任意多個字母划纽、數(shù)字或者下劃線字符
- 表達式在
運行時
可以求值脆侮,而語句不可以 - 代碼問題分為
warning
和error
兩種類型,warning
不會阻止程序的運行,但是error
會阻止程序運行 -
error
分為編譯時錯誤
和運行時錯誤
兩種,運行時錯誤會導(dǎo)致拋出異常
三勇劣、變量
- 變量類型可以自動推斷靖避,也可以顯示指定
- 為初始變量值都為
null
包括數(shù)字 - 如果某個變量值在定義之后不會再改變,那就聲明為
final
或者const
-
final
和const
變量只能賦值一次比默,但是const
變量在編譯時候 -
final
和const
變量必須在定義時候就完成初始化幻捏, -
const
變量的值必須為編譯時常量
,包括數(shù)字和字符串字面量
命咐、其它常量
和算數(shù)運算結(jié)果
- 初始化
const
變量可以省去前面的const
應(yīng)為const
肯定是常量
- 常量是防止內(nèi)容變化篡九、常量避免變量尋址、final變量用來提升代碼安全性
void main() {
var name = 'Jagger Gao';
String nickname = 'tianhuao';
var n; // null 如果沒有賦值
print(n);
final s = 'dart final'; // 運行時決定時候 如果需要 是在運行時候得到的值醋奠,可以使用 final
const c = 'dart const';
const r = 10;
const double area = 3.1e3344 * r * r; // 編譯時候可以確定下來
var v1 = const []; // 常值 空變量
final v2 = const []; // 長治
const v3 = []; // 常量執(zhí)行的值榛臼,只能是
v1 = [1, 2, 3]; // 對變量可以再次賦值
}
四、哈希表
- 哈希表是表示關(guān)聯(lián)件和關(guān)聯(lián)值窜司,鍵和值可以是任意類型對象沛善,但是鍵必須唯一
- 私用
[]
操作符來操作哈希表
- 使用哈希表字面量使用const 聲明常量
五、符文
-
Rune
是由UTF32
碼點(Code Point)
組成的字符串例证,一個Rune
字符對應(yīng)一個Unicode
字符 - 碼點 一般使用4 個十六進制字符串
\uxxxx
來表示路呜,如果超過 4 個 則需要使用{} 將使用十六進制字符括起來 -
字符串
和Rune
直接可以互相轉(zhuǎn)換
var clapping = '\u{1f44f}'; // 超過一個字符使用大括號 通過 \u + {} 表示 長度 為 2
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList()); // 碼點序列表示
六、布爾類型
- 只有兩個值
true
和false
都是編譯時常量 - 需要布爾類型织咧,必須使用布爾值
七胀葱、列表 List
-
列表
就是其它語言中的數(shù)組
,用來表示對象序列 -
列表
的索引號從零
開始笙蒙,到list.length-1
- 在列表字面量前使用const 來聲明常量
- 使用 [] 操作符來操作列表的元素
例子
void main() {
var x = 1; // 自動推斷為常數(shù)
var hex = 0xDEADBEEF;
print(hex);
var y = 1.1; // 數(shù)字字面量
var exponents = 1.42e5; // 科學(xué)計數(shù)法
print('輸出當(dāng)前exponenets ${ exponents }'); //
double z = 1; // 明確變量類型
var one = int.parse('1'); // 字符串類型轉(zhuǎn)換得到相應(yīng)整型
assert(one == 1);
var onePointPine = double.parse('1.1'); //
assert(onePointPine == 1.1); // 斷言失敗會拋出異常
String piAsString = 3.1415926.toStringAsFixed(2); // 轉(zhuǎn)換成字符串并保留小數(shù)點后面指定位數(shù)
print('piAsString ${ piAsString }'); //
assert(piAsString == '3.14'); // 斷言失敗會拋出異常
// 左移運算
assert((3 << 1) == 6);
var leftGo = 3 << 1;
print('leftGo ${ leftGo }'); //
// 右移運算
assert((3 >> 1) == 1);
var rightGo = 3 >> 1;
print('rightGo ${ rightGo }'); //
}
-
兩個字符串插值表達
// 字符串的插值 var insetStr = 'INSERT VALUE'; var completeInsert = 'my inset String $insetStr with Result'; print('completeInsert ${ completeInsert }'); //
-
字符串拼接操作
// 使用 + 號 拼接字符串 var firstStr = 'INSERT VALUE'; var sendStr = 'my inset String with Result'; var reusltComplete = firstStr + sendStr; print('reusltComplete ${ reusltComplete }'); //
-
換行的方式
使用 ’‘’ 或者 “”“ 三單引號 和 三雙引號
// 使用 ’‘’ 或者 “”“ 三單引號 和 三雙引號 var s1 = ''' you can create muti-line sting. '''; print('s1 ${ s1 }'); // /// 進行相應(yīng)的換行操作 var s2 = 'you can use \n line feed'; print('s2進行換行操作 ${ s2 }'); // /// 如果前面有 r 字符標識不做轉(zhuǎn)義 var s3 = r'you can use \n line feed'; print('s3進行換行操作 ${ s3 }'); // 保持原樣輸出
0/0
問題不會拋出異常(需要注意)
iMeantToDoThis.isNaN 進行判斷
// -------
var unicorn;
assert(unicorn == null); // 進行斷言
// 不會拋出異常
var iMeantToDoThis = 0/0抵屿;
assert(iMeantToDoThis.isNaN); // 進行斷言