Dart(四)函数

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);
}
原文地址:https://www.cnblogs.com/it-tsz/p/12509883.html