函数
/*
自定义方法的基本格式:
返回类型 方法名称(参数1,...参数N){
方法体
}
*/
// 例如:
String printStr(String str){
return 'hello $str';
}
void main() {
print(printStr('dart')); // 调用
}
可选参数
// 可选参数可以使用[] 表示, flag 形参需要指定类型的情况下,因为是可能为null 的情况, 所以需要在类型后面 使用 ? 操作符
String printStr(String str, [bool? flag]){
if(flag != null && flag){
return 'hello $str';
}
return 'hello default';
}
void main() {
print(printStr('dart'));
}
// 注意 如果参数可以为空的情况下, 需要判断 flag 不为空的情况
默认参数值
// 默认参数值 需要使用命名参数的形式进行赋值, 否则会报错, 命名参数使用 {} 表示, 调用的方法的时候需要根据参数名字传值
String printStr(String str, {bool flag = true}) {
if (flag) {
return 'hello $str';
}
return 'hello default';
}
void main() {
print(printStr('dart', flag: false));
}
匿名函数
/*
匿名方法的基本格式:
([[类型] 参数[, …]]) {
函数体;
};
*/
// 例如:
String Function(String str) printStr = (String str) {
return 'hello $str';
};
void main() {
print(printStr('dart')); // 调用
}
自执行函数
/*
自执行方法的基本格式:
(([[类型] 参数[, …]]) {
函数体;
})([[类型] 参数[, …]]);
*/
// 例如:
void main() {
((int n) {
print(n);
})(2);
}
函数递归
/*
方法的递归:
函数自身调用自身, 需要给把钥匙结束,否则会导致死循环
*/
// 例如: 求 1- 100 的和
int sum = 0;
int addFn(int n) {
sum+=n;
if(n == 100) return sum;
return addFn(n+1);
}
void main() {
int val = addFn(1);
print(val);
}
闭包
/*
全局变量: 全局变量常驻内存,但是会污染全局。
局部变量: 不常驻内存会被垃圾回收机制回收,但是不会污染全局。
闭包:
1. 常驻内存
2. 不污染全局
*/
printInfo(){
int num = 123;
return (){
num++;
print(num);
};
}
void main() {
printInfo()();
}