Dart(四)函数
https://www.jianshu.com/p/79e444806e1amain函数
特殊函数,是程序的入口。
void main(){
.....
}
函数声明
//指定返回值 函数名 参数 函数体
void test11(){
print('aa');
}
//不指定返回值 也可以
test12(num a){
print('bb $a');
}
//不指定返回值 也可以
test15(String c){
return c+c;
}
//如果函数体 只有一个表达式 可以用箭头函数形式
test13(int c) => print(c);
//箭头函数 返回一个值
test14(int c) => c+5;
void test01(){
test11();
test12(2);
test13(3);
print(test14(5));
print(test15('a'));
}
aa
bb 2
3
10
aa
参数
- 参数分必要参数和可选参数,可选参数必须在参数列表的最后。
可选参数
- 可选参数分为可选位置参数和可选命名参数
- 二者都可以定义默认值,但是默认值必须是编译时常量。
可选命名参数
void test01(){
test17(a:true,b:3);//指定可选参数名字进行传值,可以不全传值
}
//可选参数方法声明,
//使用{}括起来参数声明
//使用冒号:设置默认值
//不设置默认值又不传值 则值为null
void test17({bool a,int b,String c:'ccc'}){
if(a){
print(b);
print(c);
}else{
print(b*b);
}
}
可选位置参数
//使用[]将参数括起来,放在参数 列表最后
//可放多个参数
//可设置默认值
String test19(String from, String msg, [String device,bool sex=true]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device $sex';
}
return result;
}
void test01(){
//调用时,可选参数的位置和类型要与声明时一致
String result = test19('from','msg','ccc',false);
print(result);//from says msg with a ccc false
}
把函数当参数传递
void test01(){
//将函数传递进去
test22(test21,4);
}
//参数中有个类型为函数的参数
void test22(Function f,int p){
f(p);
}
//定义一个函数
void test21(int a){
print(a);//4
}
把函数赋值给变量
void test01(){
var t = test24;//将函数赋值给变量
t(3);//调用函数
}
//定义一个函数
void test24(int a){
print(a*a);//9
}
所有函数都有返回值,如果没有显示返回,那么默认return null;
void test01(){
var result = test26(3);
print(result);
}
//方法体内没有返回值
test26(int a){
print(a);//null
}
typedef
- 在Dart中一切皆对象,那么函数也是对象,既然是对象,那么必然有其类。所有的类都继承自Object,而函数的类是Function。但是Function并不能描述一个具体的函数信息:如返回值、参数个数和参数类型等。
- typedef就是为一个具体的函数信息声明其类型的。如一个方法
int sum(int a,int b){ return a+b;}
这是一个具体的方法,也就是一个对象,那么其类型是什么呢?用typedef描述为:
typedef int FunctionType(int a,int b);
如上描述类函数的特点:返回值int,两个参数ab,参数类型int。那么所有符合该特点的函数,都是该类型的对象,都可以在将函数当作参数时使用该类型。
如何使用:
typedef int FunctionType(int a,int b);
int compute(FunctionType fun,a,b){
return fun(a,b);
}
int sum(int a,int b){
return a+b;
}
int sub(int a,int b){
return a-b;
}
void main(){
int sumNum = compute(sum,3,4);
int subNum = compute(sub,4,5);
}