Dart 函数

自定义方法

​ 自定义方法的基本格式:

    返回类型  方法名称(参数1,参数2,...){
        方法体
        return 返回值;
    }

可传参数的方法

基本可传参数方法

void sum(int a, int b){ // 定义需要传多个参数,用英文,隔开
  print(a + b);
}
sum(2,4);

参数返回值

int sum(int a, int b){ 
  return a + b;
}
print(sum(2,4));

不同于OC,方法体内,若不写return,定义了有返回值的函数,会默认返回 null,即:

int sum(int a, int b){ 
} 
print(sum(2,4)); // 这样打印出来的结果就是 null

定义参数可选

利用[],来定义可选参数。

  String student(String name, [int age, int studentId]){ // 在中括号内的参数,即为可选参数,可传可不传
    return '姓名:$name, 年龄:$age, 学号:$studentId';
  }
  print(student('张三')); // 这样打印结果为:姓名:张三, 年龄:null, 学号:null

定义带默认值的参数

直接在定义参数后面加入需要的默认值,在调用时不传参数,就会自动给参数赋默认值。

  String student(String name, [int age = 20, int studentId]){
    return '姓名:$name, 年龄:$age, 学号:$studentId';
  }

  print(student('张三')); // 这样打印结果为:姓名:张三, 年龄:20, 学号:null

定义函数参数命名

利用 {},将调用时需要命名的参数定义在{}内,那么调用时,则需要在传参时给参数传入相同的参数名称,否则会报错。例:

  String student(String name, {int age = 20}){ 
    return '姓名:$name, 年龄:$age';
  }

  print(student('张三', age:30));

将方法作为参数

将方法作为函数参数传值,例:

  //方法1
  func1(){
    print('func1');
  }
  //方法2
  func2(func){
    func1();
  }
  //调用func2这个方法 把func1这个方法当做参数传入
  func2(func1);

箭头函数

箭头函数只能写一句话,不能写多句话,不用填加分号结尾。例:

    List list=['string1','string2','string3'];
        // 使用 forEach 遍历 list 内的元素
    list.forEach((value){
      print(value);
    });
        // 改为箭头函数
    // 第一种
    list.forEach((value)=>print(value));

    // 第一种
    list.forEach((value)=>{
      print(value)
    });

自执行方法

不用函数调用,可以自执行的方法。例:

// 没有参数的自执行方法
((){
  print('自执行方法');
})();
// 定义带参数的自执行方法
((String str){
  print(str);
  print('带参数的自执行方法');
})('我是传入的参数String');
// 打印结果为 我是传入的参数String 自执行方法

递归函数

// 递归求和
    var sum=0;
    funcSum(int n){
        sum+=n;
        if(n==0){
          return;
        }
        funcSum(n-1); // 循环调用 funcSum 函数
    }

    funcSum(5);
// 计算结果 sum 为 15

闭包

闭包实现的功能为:可以常驻内存但不污染全局。

闭包的实现方式为:函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)。

闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。

你可能感兴趣的:(Dart 函数)