# 函数
# 函数定义
自定义方法:
返回类型 方法名(参数1,参数2,...){
方法体;
return 返回值;//与返回类型保持一致
}
比如main方法:
void main(){
print('Hello Dart.');
}
我们一般自定义一个方法,可在main中调用:
void printMsg(String msg){
print('自定义方法 $msg');
}
main(){
printMsg('Hello Dart.');
}
//自定义方法 Hello Dart.
# 可选参数
可选参数使用中括号[]
括起来,放在参数列表末尾,可以是多个,例如:
void printUsrInfo(String name,[int age]){
if(age!=null)
print('姓名: $name,年龄:$age');
else
print('姓名: $name,年龄:未知');
}
main(){
printUsrInfo('张三',23);
printUsrInfo('李四');
}
//姓名: 张三,年龄:23
//姓名: 李四,年龄:未知
# 默认参数
同可选参数一样,默认参数也写在中括号中,并且写在可选参数前,赋有默认值,则此参数如果不传,默认使用该默认值。
void printUsrInfo(String name,[String sex = '男',int age]){
if(age!=null)
print('姓名: $name,年龄:$age,性别:$sex');
else
print('姓名: $name,年龄:未知,性别:$sex');
}
main(){
printUsrInfo('张三','男',23);
printUsrInfo('李四','女');
}
//姓名: 张三,年龄:23,性别:男
//姓名: 李四,年龄:未知,性别:女
# 命名参数
命名参数用大括號{}
,调用传参时使用类似于键值对传入,如:
void printUsrInfo(String name,{String sex = '男',int age}){
if(age!=null)
print('姓名: $name,年龄:$age,性别:$sex');
else
print('姓名: $name,年龄:未知,性别:$sex');
}
main(){
printUsrInfo2('张三',age:20,sex:'未知');
}
//姓名: 张三,年龄:20,性别:未知
把方法当做参数
var fn = () {
print('我是一个匿名方法');
};
//方法
fn1() {
print('fn1');
}
//方法
fn2(fn) {
fn();//这里的 fn 是参数 fn,不是上面的函数 fn
}
main() {
//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);//fn1
}
# 箭头函数
箭头函数函数体只能一行代码。
List list = ['Apple', 'HuaWei', 'Samsung'];
//遍历
list.forEach((value) {
print(value);
});
//箭头函数
list.forEach((value)=>{
print(value)
});
list.forEach((value)=>print(value));
map函数,一数组,单数乘2,偶数不变。
List list2 = [1, 2, 3, 4, 5, 6, 7];
var newList = list2.map((value) {
if (value % 2 == 1) {
return value * 2;
}
return value;
});
print(newList.toList());
//[2, 2, 6, 4, 10, 6, 14]
//箭头函数改写
var newList2 = list2.map((value) => value % 2 == 1 ? value * 2 : value);
print(newList2.toList());
# 匿名函数
var printNum = (int num){
print(num);
};
printNum(123+32);
# 自执行方法
已运行自动执行。
((){
print('自执行方法');
})();
# 闭包函数
- 全局变量 常驻内存,污染全局
- 局部变量 不常驻内存,会被垃圾回收机制回收,不会污染全局
闭包:函数嵌套函数,内部函数会调用外部函数的变量的参数,变量会参数不会被系统回收
闭包写法:函数嵌套函数,并return里面函数,形成闭包。
fun() {
var a = 1;
return () {
a++;
print(a);
};
}
var b = fun();
b();b();b();
//2
//3
//4
← 集合 List Set Map 类与对象 →