Dart中函数是对象其类型为Function,可以作为参数被另一个函数调用也可以作为一个变量。Dart中不支持函数的重载(同名,不同参),但是提供了位置可选参数和命名可选参数(都是可选参数),位置可选参数和命名可选参数不可以同时使用并在申明的时候得放在其它参数之后,二者的区别是命名可选参数的调用与申明顺序无关而位置可选参数则相反。
语法:
返回参数类型函数名(参数1, 参数2,....) {
函数代码
}
调用函数语法:
函数名(参数1, 参数2,....);
演示代码:
void main(List args){
var res = P_Group(5, 8);
//必选参数
print("P_Group is "+ res.toString());
//可选参数---位置可选参数、命名可选参数
var res1 = P_Group1(5, 5,5);
var res2 = P_Group1(5, 5);
//位置可选参数调用和声明的位置有关如下列第三个会编译不通过报错
//type 'String' is not a subtype of type 'int' of 'c' where
print("位置可选参数 --P_Group1 "+ res1);
print("位置可选参数----没有传使用默认的---P_Group1 "+ res2);
// print("位置可选参数----P_Group1 "+ P_Group1(10, 10,"yf"));
print("位置可选参数----P_Group1 "+ P_Group1(10, 10,));
print("箭头函数---P_Group2 is "+P_Group2(10, 1));
//命名可选参数调用,其调用顺序和声明顺序无关 调用方式:参数名: 参数值
print("命名可选参数"+item(12,d:10));
print("命名可选参数"+item(8,d:10,msg:"yf"));
print("命名可选参数"+item(80,msg:"yf",d:20));
print("命名可选参数"+item(80,msg:"yf",d:20));
print("函数作为参数 "+ item2(res,"yf"));
//匿名函数
Map user = {'name':'ddh','age':18};
user.forEach((kye,value)=> print(kye+' '+value.toString()));
}
intP_Group(int a,int b)=> a+b;
//位置可选参数
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();
}
//箭头函数 只能有一行,可以没有return
StringP_Group2(int a,int b,[int c =10])=> (a+b+c).toString();
//命名可选参数,使用 = 号 定义命名参数默认值
Stringitem (int a,{int d,String msg ='ddh'}){
if(a >=10 && d !=null){
return "$a大于10了 "+msg;
}
return "$a数小了 "+msg;
}
//函数作为参数
Stringitem2(P_Group,String msg){
return P_Group.toString()+" "+msg;
}
运行结果:
若有不对之处还希望指正为谢!@~@
网友评论