在Dart中函數(shù)也是對象碾盟,并且有一個類型Function
德频,這意味著函數(shù)可以存儲在變量中路操,也可以作為參數(shù)傳遞給其他函數(shù)。
函數(shù)聲明
函數(shù)聲明由返回值
函數(shù)別名
函數(shù)閉包
函數(shù)參數(shù)
函數(shù)參數(shù)有兩種:必填參數(shù)和可選參數(shù)诅诱,它們可以同時出現(xiàn)髓堪,但可選參數(shù)必須在必填參數(shù)之后。
必填參數(shù)
Dart中支持兩種可選參數(shù):命名可選參數(shù)和位置可選參數(shù)。需要注意:兩種可選參數(shù)不能同時使用干旁。
- 命名可選參數(shù)使用大括號{}驶沼,默認值用
=
- 位置可選參數(shù)使用方括號[],默認值用
=
不推薦:舊版代碼中可以使用冒號(:)而不是等號(=)設置
命名可選參數(shù)
的默認值争群。原因是起初命名參數(shù)只支持冒號(:),這種支持可能會被棄用回怜,建議使用等號(=)指定默認值”。
命名可選參數(shù)
TestA(a,{b,c:3,d:4,e}){
print('$a $b $c $d $e');
}
在以上函數(shù)中使用了命名可選參數(shù)
- 大括號外
a
為必填參數(shù) - 大括號內(nèi)的參數(shù)可以指定0或多個换薄,并且與順序無關玉雾,在調(diào)用函數(shù)時需要指明參數(shù)名
- 沒有賦值的參數(shù)值為
null
void main() {
TestA(1); // 1 null 3 4 null
TestA(1,b:2,e:5); // 1,2,3,4,5
}
位置可選參數(shù)
TestB(a,[b,c=3,d=4,e]){
print('$a $b $c $d $e');
}
以上函數(shù)使用了位置可選參數(shù)
- 大括號外
a
為必填參數(shù) - 大括號內(nèi)的參數(shù)可以指定0或多個,并且在調(diào)用函數(shù)時需要參數(shù)值會依次按順序賦值
- 沒有賦值的參數(shù)值為
null
void main() {
TestB(1); // 1 null 3 4 null
TestB(1,2,"賦值3"); //1 2 賦值3 4 null
}
Flutter中的使用
Flutter創(chuàng)建實例時可能需要指定多個參數(shù)轻要,使用命名可選參數(shù)更易于閱讀复旬。
下面是StatefulWidget的構造函數(shù):
const StatefulWidget({
Key key
})
實現(xiàn)
const StatefulWidget({Key key}):super(key:key);
在實現(xiàn)中super(key:key)
,在這里就是在調(diào)用super時,設置命名可選參數(shù)的值冲泥,其中冒號左側的key
是可選參數(shù)驹碍,冒號右側的key
是可選參數(shù)的值。