函数
/*自定义方法的基本格式: 返回类型 方法名称(参数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()();}