dart notes

變量定義與擴展

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)換為字符串
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末约急,一起剝皮案震驚了整個濱河市零远,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厌蔽,老刑警劉巖牵辣,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奴饮,居然都是意外死亡纬向,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門戴卜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逾条,“玉大人,你說我怎么就攤上這事投剥∈χ” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵江锨,是天一觀的道長吃警。 經(jīng)常有香客問我,道長啄育,這世上最難降的妖魔是什么汤徽? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮灸撰,結(jié)果婚禮上谒府,老公的妹妹穿的比我還像新娘拼坎。我一直安慰自己,他們只是感情好完疫,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布泰鸡。 她就那樣靜靜地躺著,像睡著了一般壳鹤。 火紅的嫁衣襯著肌膚如雪盛龄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天芳誓,我揣著相機與錄音余舶,去河邊找鬼。 笑死锹淌,一個胖子當(dāng)著我的面吹牛匿值,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赂摆,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼挟憔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烟号?” 一聲冷哼從身側(cè)響起绊谭,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汪拥,沒想到半個月后达传,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡迫筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年宪赶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铣焊。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖罕伯,靈堂內(nèi)的尸體忽然破棺而出曲伊,到底是詐尸還是另有隱情,我是刑警寧澤追他,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布坟募,位于F島的核電站,受9級特大地震影響邑狸,放射性物質(zhì)發(fā)生泄漏懈糯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一单雾、第九天 我趴在偏房一處隱蔽的房頂上張望赚哗。 院中可真熱鬧她紫,春花似錦、人聲如沸屿储。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽够掠。三九已至民褂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疯潭,已是汗流浹背赊堪。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竖哩,地道東北人哭廉。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像期丰,于是被迫代替她去往敵國和親群叶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容