變量定義與擴展
Dart數(shù)字變量定義
var a = 1;
num b = 1;
int c = 2; // 整型
double d = 3.4; // 浮點型
Dart字符串變量定義
var a = '456';
String b = '123';
Dart布爾值變量定義與擴展
var a = true;
bool b = false;
// 擴展
bool foo = true;
var str = '123';
if(foo) {
// 可執(zhí)行
}
if(str) {
// 不執(zhí)行
}
if(str == '123') {
// 可執(zhí)行
}
- 如果單個變量作為條件進行判斷時候侵状,變量類型必須為布爾型,否則報錯
- 與JS相比正罢,沒有JS變量類型靈活多變阵漏,更受控
Dart列表變量定義
var list = [1, 2, 3];
List list1 = [4, 5, 6];
Dart對象變量定義
var map = {'a': 123, 'b': 456};
Map map1 = {'a': 123, 'b': 456};
- 鍵名需要用引號,鍵名也可以是純數(shù)字不含引號翻具,區(qū)別于JS
- Dart對象沒有點方法履怯,調(diào)用對象中某鍵值或者賦值,使用 Map['key']來實現(xiàn)
Dart函數(shù)定義與擴展
func() {
// statement
}
func() => statement
// 擴展
func(int a, [bool b, String c: '123']) { // 必填參數(shù):a裆泳,可選參數(shù):b叹洲,可選默認(rèn)參數(shù):c
// statement
}
變量申明
// var
// 申明動態(tài)類型變量
// 不能與靜態(tài)類型申明同時出現(xiàn)
var a = '123';
var String a1 = 'abc'; // 錯誤申明方式
// dynamic
// 申明動態(tài)類型變量
// 不能與靜態(tài)類型申明同時出現(xiàn)
dynamic b = 123;
dynamic String b1 = 'abc'; // 錯誤申明方式
// final
// 申明動態(tài)類型變量,賦值后不可變更
// 可以與靜態(tài)類型申明同時出現(xiàn)
final c = true;
final bool c1 = false;
// const
// 申明動態(tài)類型變量工禾,賦值后不可變更
// 可以與靜態(tài)類型申明同時出現(xiàn)
const d = true;
const bool d1 = false;
- var 和 dynamic 可以互換通用
- final 和 const 可以互換通用
- final 和 const 申明的列表或?qū)ο箢愋偷腄art變量运提,內(nèi)部元素值也不能做修改,不同于JS
操作符
對比 Dart 與 JS 操作符號
運算符 | Dart | JS | 備注 |
---|---|---|---|
賦值闻葵、加民泵、減、乘槽畔、除栈妆、取余 | = + - * / % | = + - * / % | 完全相同 |
向下取整 | ~/ | N/A | |
自增、自減 | ++var var++ --var var-- | ++var var++ --var var-- | 完全相同 |
全等 | == | === | |
抽象等于 | N/A | == | |
不等 | != | !== | |
小于、小于等于签钩、大于掏呼、大于等于 | < <= > >= | < <= > >= | 完全相同 |
類型判斷 | is is! | N/A |
字符串屬性與操作方法
屬性
屬性 | 描述 |
---|---|
isEmpty | 判斷字符串是否為空字符串 |
isNotEmpty | 判斷字符串是否為非空字符串 |
length | 獲取字符串長度 |
方法
方法 | 描述 |
---|---|
compareTo(String other) → int | 將此對象與另一對象進行比較,小于本身1铅檩,相等0憎夷,大于本身-1,字符串比較 |
contains(Pattern other, [int startIndex = 0]) → bool | 判斷字符串中是否包含給定字符串或正則表達式昧旨,返回【boolean】 |
endsWith(String other) → bool | 判斷字符串是否以給定字符串結(jié)尾拾给,返回【boolean】 |
indexOf(Pattern pattern, [int start]) → int | 獲取給定字符串在字符串中的第一個指針值 |
lastIndexOf(Pattern pattern, [int start]) → int | 獲取給定字符串在字符串中的最后一個指針值 |
padLeft(int width, [String padding = ' ']) → String | 如果字符串自身長度小于width,在字符串左側(cè)填補padding補足 |
padRight(int width, [String padding = ' ']) → String | 如果字符串自身長度小于width兔沃,在字符串右側(cè)填補padding補足 |
replaceAll(Pattern from, String replace) → String | 全局替換內(nèi)容蒋得,返回替換后字符串,不改變原字符串 |
replaceFirst(Pattern from, String to, [int startIndex = 0]) → String | 替換字符串中第一個匹配內(nèi)容乒疏,可指定匹配起始指針额衙,返回新字符串,不改變原字符串 |
split(Pattern pattern) → List<String> | 按照給定方式怕吴,將字符串拆分為列表窍侧,返回列表 |
splitMapJoin(Pattern pattern, {(Match) → String onMatch, (String) → String onNonMatch}) → String | 同時替換匹配目標(biāo)和不匹配目標(biāo),返回字符串 |
startsWith(Pattern pattern, [int index = 0]) → bool | 判斷字符串是否以給定字符串開頭转绷,返回【boolean】 |
substring(int startIndex, [int endIndex]) → String | 返回此字符串的子字符串伟件,[左閉右開),未指定結(jié)束指針默認(rèn)為末尾指針 |
toLowerCase() | 將此字符串中的所有字符轉(zhuǎn)換為小寫议经,不改變本身 |
toString() | 返回此對象的字符串表示形式 |
toUpperCase() | 將此字符串中的所有字符轉(zhuǎn)換為大寫斧账,不改變本身 |
trim() | 去除字符串首尾空格,不改變本身 |
trimLeft() | 去除字符串首部空格煞肾,不改變本身 |
trimRight() | 去除字符串尾部空格咧织,不改變本身 |
示例
// padLeft
'abc'.padLeft(5, '_'); // __abc
'abc'.padLeft(1, '_'); // abc
// splitMapJoin
'ababab'.splitMapJoin('a', onMatch: (m) => 'c', onNonMatch: (n) => 'd'); // cdcdcd
'ababab'.splitMapJoin('a', onMatch: (m) => 'c', onNonMatch: (n) => n); // cbcbcb
數(shù)字屬性與操作方法
屬性
屬性 | 描述 |
---|---|
isFinite | 判斷數(shù)字是否為有限大小 |
isInfinite | 判斷數(shù)字是否為無窮大小 |
isNegative | 判斷數(shù)字是否為負(fù)數(shù) |
sign | 判斷數(shù)字為正數(shù)、負(fù)數(shù)或零籍救,返回 1拯爽,-1,0 |
isEven | 判斷數(shù)字為偶數(shù) |
isOdd | 判斷數(shù)字為奇數(shù) |
方法
方法 | 描述 |
---|---|
abs() | 取絕對值 |
ceil() | 向上取整 |
ceilToDouble() | 向上取整同時轉(zhuǎn)為浮點型 |
clamp(num lowerLimit, num upperLimit) → num | 數(shù)字在區(qū)間內(nèi)钧忽,返回該數(shù)字毯炮;數(shù)字不在區(qū)間內(nèi),返回最接近該數(shù)字的邊界值 lowerLimit || upperLimit |
compareTo(num other) → int | 比較數(shù)值兩數(shù)值大小耸黑,返回 1桃煎,-1,0 |
floor() | 向下取整 |
floorToDouble() | 向下取整同時轉(zhuǎn)為浮點型 |
round() | 四舍五入 |
roundToDouble() | 四舍五入同時轉(zhuǎn)為浮點型 |
remainder(x) | x表述除數(shù)大刊,計算數(shù)值除以除數(shù)后得到的余數(shù) |
toInt() | 轉(zhuǎn)為整型 |
toDouble() | 轉(zhuǎn)為浮點型 |
toString() | 轉(zhuǎn)為字符串 |
truncate() | 舍去小數(shù)为迈,截斷功能 |
示例
// clamp
num number = 6,4;
number.clamp(5, 7); // 6.4
number.clamp(5, 6); // 6
number.clamp(7, 9); // 7
列表屬性與操作方法
屬性
屬性 | 描述 |
---|---|
first | 返回列表中第一個元素 |
isEmpty | 判斷列表為空列表【boolean】 |
isNotEmpty | 判斷列表為非空列表【boolean】 |
length | 列表長度 |
last | 返回列表中最后一個元素 |
reversed | 返回倒序列表 |
single | 檢查列表是否只用一個元素并返回該元素,否則報錯[Too many elements] |
方法
方法 | 描述 |
---|---|
add(el) | 在列表末尾添加單個元素 |
addAll([el1, el2, ...]) | 在列表末尾添加多個元素 |
asMap() | 將列表轉(zhuǎn)換為對象,鍵名為原列表指針 |
any() | 列表中是否有至少一個元素滿足條件【boolean】葫辐,類同于contains() |
clear() | 清空列表搜锰,改變原列表 |
contains(el) | 列表中是否包含某元素【boolean】,類同于any() |
elementAt(index) | 返回對應(yīng)指針的元素值 |
every((E) → bool test) → bool | 列表中是否每個元素都滿足條件【boolean】 |
expand((el) => statement) | 對列表中的每個元素進行擴展操作耿战,返回可遍歷對象(el1, el2, el3, ...) |
fillRange(int start, int end, [int fillValue]) | 指定指針區(qū)間單一元素填充蛋叼,start 必填,end 必填剂陡,[左閉右開)狈涮,fillValue 為單個 int 型變量 |
firstWhere((E) → bool test, {() → E orElse}) | 返回列表中滿足條件的第一個元素,不滿足則返回-1 |
getRange(int start, int end) → Iterable<E> | 獲取指針區(qū)間內(nèi)元素的可遍歷對象鸭栖,[左閉右開) |
insert(int index, int value) | 在列表指定指針位置插入單個int型元素 |
insertAll(int index, Iterable<int> iterable) | 在列表指定指針位置插入int型元素列表 |
indexOf(el) → int | 返回給定元素指針歌馍,不滿足則返回-1 |
indexWhere((int) → bool test, [int start = 0]) | 返回列表中滿足條件的第一個元素的指針,可指定驗證起始指針晕鹊,默認(rèn)從頭開始松却,不滿足則返回-1 |
join([String separator = ""]) | 返回字符串,默認(rèn)不分割溅话,參照J(rèn)S中join方法 |
lastIndexOf(int element, [int start]) | 返回指定元素的指針值玻褪,可以給定起始查詢指針,不滿足則返回-1 |
lastIndexWhere((dynamic) → bool test, [int start]) → int | 返回列表中滿足條件的倒數(shù)第一個元素的指針公荧,可指定起始指針,不滿足則返回-1 |
lastWhere((E) → bool test, {() → E orElse}) → E | 返回列表中滿足條件的倒數(shù)第一個元素同规,否則報錯 |
map<T>((E) → T f) → iterable<T> | 遍歷擴展每個列表中的元素循狰,返回可遍歷對象 |
removeAt(int index) → int | 刪除指定指針對應(yīng)的元素值,返回被刪除元素券勺,更改原列表 |
remove(el) | 刪除指定元素值绪钥,返回【boolean】,更改原列表 |
removeLast() → int | 刪除列表最后一個元素关炼,返回被刪除元素值程腹,更改原列表 |
removeRange(int start, int end) | 刪除列表指針區(qū)間內(nèi)元素,無返回值儒拂,更改原列表 |
removeWhere((String) → bool test) → void | 刪除列表中滿足判斷條件的所有元素寸潦,無返回值,更改原列表 |
replaceRange(int start, int end, Iterable<int> replacement) | 替換列表中給定指針區(qū)間內(nèi)的元素社痛,更改原列表 |
retainWhere((int) → bool test) → void | 篩選出列表中滿足條件的所有元素的列表见转,替代原列表,無返回值 |
setAll(int index, Iterable<int> iterable) → void | 從指定指針開始替換列表元素蒜哀,不能溢出斩箫,無返回值 |
setRange(int start, int end, Iterable<int> iterable, [int skipCount = 0]) → void | 更改列表指定指針區(qū)間內(nèi)的元素,無返回值 |
shuffle() → void | 隨機排序列表,無返回值 |
skip(int count) → Iterable<E> | 跳過列表前count個元素乘客,返回可遍歷對象狐血,非列表 |
sort([(int, int) → int compare]) → void | 快速排序 |
sublist(int start, [int end]) → List<String> | 從列表中截取起止指針區(qū)間內(nèi)的元素,返回結(jié)果列表易核,[左閉右開) |
take(int count) → Iterable<E> | 截取列表前count個元素匈织,并返回可遍歷對象 |
takeWhile((E) → bool test) → Iterable<E> | 從列表首個元素開始驗證條件,返回可遍歷對象耸成,任一元素不符合條件报亩,立即停止條件判斷 |
toList() | 列表化數(shù)據(jù),可遍歷對象轉(zhuǎn)列表 |
toSet() | 去重列表化數(shù)據(jù) |
toString() | 字符串話數(shù)據(jù) |
where((E) → bool test) → Iterable<E> | 篩選出滿足條件的可遍歷對象 |
whereType<T>() → Iterable<T> | 篩選列表中某類型的所有元素井氢,返回可遍歷對象 |
示例:
// expand
List a = [1, 2, 3];
var b = a.expand((el) => [el, el + 1]);
var c = b.toList();
print(b); // (1, 2, 2, 3, 3, 4)
print(c); // [1, 2, 2, 3, 3, 4]
// fillRange
List list = [1, 2, 3];
list.fillRange(1, 2, 4); // [1, 4, 3]
list.fillRange(1, 3, 4); // [1, 4, 4]
// getRange
List foo = [1, 2, 3];
var res = foo.getRange(1, 3);
print(res); // (2, 3)
// lastIndexWhere
List liw = [4, 5, 6];
liw.lastIndexWhere((el) => el > 4); // 2
liw.lastIndexWhere((el) => el > 1, 1) // 1
liw.lastIndexWhere((el) => el > 1, 0) // -1
// lastWhere
List lw = [4, 5, 6];
lw.lastWhere((el) => el > 1); // 6
// map
var ls = [1, 2, 3];
var resls = ls.map((el) => el + 1);
var resls = ls.map((el) => el + 1).toList();
print(resls); // (1, 2, 3)
// replaceRange
List l = [1, 2, 3, 4, 5];
l.replaceRange(0, 2, [4, 5, 6]); // [4, 5, 6, 3, 4, 5]
l.replaceRange(0, 2, [4]); // [4, 3, 4, 5]
l.replaceRange(0, 2, []); // [3, 4, 5]
// retainWhere
var retainList = [1, 2, 3, 4];
retainList.retainWhere((el) => el > 2)
print(retainList); // [3, 4]
// setAll
var setList = [1, 2, 3];
setList.setAll(1, [4, 5]);
print(setList); // [1, 4, 5]
setList.setAll(1, [4, 5, 6]);
print(setList); // RangeError.checkValidRange
// setRange
List<int> list1 = [1, 2, 3, 4];
List<int> list2 = [5, 6, 7, 8, 9];
list1.setRange(1, 3, list2, 3);
print(list1); // [1, 8, 9, 4]
list1.setRange(1, 3, list2, 1);
print(list1); // [1, 6, 7, 4]
list1.setRange(1, 3, list2, 4);
print(list1); // Too few elements
// skip
List ls1 = [1, 2, 3, 4];
var iterable = ls1.skip(2);
var iterable1 = ls1.skip(2).toList();
print(iterable); // (3, 4)
print(iterable1); // [3, 4]
// sort
List<num> ls2 = [1, 2, 3, 4];
List<num> ls3 = [5, 6, 7];
ls2.sort((a, b) => b - a);
ls3.sort((a, b) => a - b);
print(ls2); // [4, 3, 2, 1]
print(ls3); // [5, 6, 7]
// takeWhile
List<int> list2 = [6, 5, 7, 8, 9];
var res1 = list2.takeWhile((el) => el > 5);
var res2 = list2.takeWhile((el) => el > 4);
var res1 = list2.takeWhile((el) => el > 6);
print(res1); // (6)
print(res2); // (6, 5, 7, 8, 9)
print(res3); // ()
// whereType
List list2 = [6, '5', 7, 8, 9];
var res = list2.whereType<String>();
print(res); // (5)
函數(shù)
函數(shù)定義
// 函數(shù)通常定義方式
func_name() {
// func_body
}
// void 表示函數(shù)沒有任何返回值
void func_name() {
// func_body
}
函數(shù)調(diào)用
void main() {
func()
}
func() {
print('function')
}
函數(shù)返回值
return_type func_name() {
return value;
}
- return_type 為有效的數(shù)據(jù)類型
- return 可選弦追,未指定為 null
- 函數(shù)實際返回值,必須與指定的 return_type 相一致
- 單個函數(shù)只有一個返回值
void main() {
print(func());
}
String func() {
return 'abc';
}
函數(shù)可選參數(shù)花竞,命名參數(shù)劲件,默認(rèn)參數(shù)
void main() {
func1(123);
func2(123);
func2(123,s1:'abc');
func2(123,s2:'abc',s1:'def');
func3(123);
}
void func1(n1,[s1]) {
print(n1);
print(s1);
}
void func2(n1,{s1,s2}) {
print(n1);
print(s1);
}
void func3(n1,{s1:12}) {
print(n1);
print(s1);
}
/**
123
null
123
null
123
abc
123
def
123
12
*/
字典(對象)
屬性
屬性 | 描述 |
---|---|
keys | 獲取所有鍵名可遍歷對象 |
values | 獲取所有鍵值可遍歷對象 |
length | 獲取鍵值對數(shù)量 |
isEmpty | 判斷是否為空對象 |
isNotEmpty | 判斷是否為非空對象 |
方法
方法 | 描述 |
---|---|
addAll() | 末尾添加鍵值對 |
clear() | 清空對象 |
containsKey(Object key) → bool | 判斷對象中是否包含某個鍵名 |
containsValue(Object value) → bool | 判斷對象中是否包含某個鍵值 |
forEach((k, v) => ...) | 循環(huán)調(diào)用內(nèi)部鍵值對方法 |
remove(key) | 刪除指定鍵值對,返回值為指定鍵值對應(yīng)的值 |
removeWhere((dynamic, dynamic) → bool predicate) → void | 刪除滿足條件的鍵值對 |
toString() | 轉(zhuǎn)換為字符串 |