自定义方法
自定义方法的基本格式:
返回类型 方法名称(参数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 里面的函数,这样就形成了闭包。