Dart中函數(shù)是對象其類型為Function桃煎,可以作為參數(shù)被另一個(gè)函數(shù)調(diào)用也可以作為一個(gè)變量醋拧。Dart中不支持函數(shù)的重載(同名卿嘲,不同參)呻此,但是提供了位置可選參數(shù)和命名可選參數(shù)(都是可選參數(shù)),位置可選參數(shù)和命名可選參數(shù)不可以同時(shí)使用并在申明的時(shí)候得放在其它參數(shù)之后腔寡,二者的區(qū)別是命名可選參數(shù)的調(diào)用與申明順序無關(guān)而位置可選參數(shù)則相反焚鲜。
語法:
返回參數(shù)類型函數(shù)名(參數(shù)1, 參數(shù)2,....) {
函數(shù)代碼
}
調(diào)用函數(shù)語法:
函數(shù)名(參數(shù)1, 參數(shù)2,....);
演示代碼:
void main(List args){
var res = P_Group(5, 8);
? //必選參數(shù)
? print("P_Group is "+ res.toString());
? //可選參數(shù)---位置可選參數(shù)放前、命名可選參數(shù)
? var res1 = P_Group1(5, 5,5);
? var res2 = P_Group1(5, 5);
? //位置可選參數(shù)調(diào)用和聲明的位置有關(guān)如下列第三個(gè)會(huì)編譯不通過報(bào)錯(cuò)
//type 'String' is not a subtype of type 'int' of 'c' where
? print("位置可選參數(shù) --P_Group1? "+ res1);
? print("位置可選參數(shù)----沒有傳使用默認(rèn)的---P_Group1 "+ res2);
//? print("位置可選參數(shù)----P_Group1? "+ P_Group1(10, 10,"yf"));
? print("位置可選參數(shù)----P_Group1? "+ P_Group1(10, 10,));
? print("箭頭函數(shù)---P_Group2 is "+P_Group2(10, 1));
? //命名可選參數(shù)調(diào)用忿磅,其調(diào)用順序和聲明順序無關(guān)? ? 調(diào)用方式:參數(shù)名: 參數(shù)值
? print("命名可選參數(shù)"+item(12,d:10));
? print("命名可選參數(shù)"+item(8,d:10,msg:"yf"));
? print("命名可選參數(shù)"+item(80,msg:"yf",d:20));
? print("命名可選參數(shù)"+item(80,msg:"yf",d:20));
? print("函數(shù)作為參數(shù)? "+ item2(res,"yf"));
? //匿名函數(shù)
? Map user = {'name':'ddh','age':18};
? user.forEach((kye,value)=> print(kye+' '+value.toString()));
}
intP_Group(int a,int b)=> a+b;
//位置可選參數(shù)
StringP_Group1(int a,int b,[int c,String msg ="ddh"]){
if(c ==null){
return msg+" A+B= "+(a+b).toString();
? ? }
return msg+" A+B+C= "+(a+b+c).toString();
}
//箭頭函數(shù)? 只能有一行,可以沒有return
StringP_Group2(int a,int b,[int c =10])=> (a+b+c).toString();
//命名可選參數(shù)凭语,使用 = 號 定義命名參數(shù)默認(rèn)值
Stringitem (int a,{int d,String msg ='ddh'}){
if(a >=10 && d !=null){
return "$a大于10了? "+msg;
? }
return "$a數(shù)小了? "+msg;
}
//函數(shù)作為參數(shù)
Stringitem2(P_Group,String msg){
return P_Group.toString()+"? "+msg;
}
運(yùn)行結(jié)果:
若有不對之處還希望指正為謝葱她!@~@